Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The PHP 5.4 Features You'll Actually Use

The PHP 5.4 Features You'll Actually Use

OSCON talk (short slot) on some of the new features in PHP 5.4

Lorna Mitchell

July 18, 2012
Tweet

More Decks by Lorna Mitchell

Other Decks in Technology

Transcript

  1. About Me 2 • Lorna Jane Mitchell • PHP Consultant/Developer

    • Author of PHP Master • Twitter: @lornajane • Website: http://lornajane.net
  2. About PHP 5.4 3 • New features • Traits •

    Built-in webserver • New array syntax • And more! • Removed some nonsense • This talk covers the best bits* * an entirely subjective selection
  3. Array Syntax 6 We had this: $game[] = 'paper'; $game[]

    = 'scissors'; $game[] = 'stone'; print_r($game); $game[0] = 'paper'; $game[1] = 'scissors'; $game[2] = 'stone'; print_r($game);
  4. Array Syntax 7 Or this: $game = array('stone', 'paper', 'scissors');

    print_r($game); $game = array(0 => 'stone', 1 => 'paper', 2 => 'scissors'); print_r($game);
  5. Array Syntax 8 Now we can do: $game = ['scissors',

    'stone', 'paper']; print_r($game); $game = [0 => 'scissors', 1 => 'stone', 2 => 'paper']; print_r($game);
  6. PHP Versions Speed Comparison 11 Benchmarks made using: • Newly-compiled

    vanilla PHP binaries • The bench.php script in the PHP source tree • A rather average laptop • 10 runs per version, then averaged
  7. Traits 17 Re-usable groups of methods, in languages with single

    inheritance. • Declare a trait, it looks like a class • Add the trait to your class using the use keyword • Methods are available!
  8. Simplest Trait Example 18 <?php trait Audit { public function

    getAuditTrail() { return "nothing changed"; } } class Princess { use Audit; // General princess class description: // soldering, tree climbing, the usual } $daisy = new Princess(); echo $daisy->getAuditTrail();
  9. Other Trait Trivia 19 • They can be aliased when

    used • There are rules about resolving naming clashes • Traits can include properties • Traits can include abstract methods • Traits can themselves make use of other traits
  10. Built In Webserver 21 Built in application server for PHP

    5.4 • Simple • Lightweight • Development use only From the manual: "Requests are served sequentially." http://lrnja.net/NQoXsh
  11. Webserver Examples 22 Start a simple server on a port

    number of your choice php -S localhost:8080 http://localhost:8080
  12. Webserver Examples 24 Specify the docroot php -S localhost:8080 -t

    /var/www/superproject Specify which php.ini to use (default: none) php -S localhost:8080 -c php.ini-development
  13. Webserver Examples 25 Use a routing file (example from http://lrnja.net/LigI4U)

    <?php if (file_exists(__DIR__ . '/' . $_SERVER['REQUEST_URI'])) { return false; // serve the requested resource as-is } else { include_once 'index.php'; } routing.php php -S localhost:8080 routing.php The webserver runs routing.php before entering the requested script. This example serves any existing resource, or routes to index.php
  14. Session Upload Progress 27 File upload progress, written to the

    session at intervals Useful for user feedback, e.g. shiny new HTML5 progress bars!
  15. Tracking Upload Progress 28 User starts uploading file in the

    usual way <form name="upload" method="post" enctype="multipart/form-data"> <input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="123" /> File: <input type="file" id="file1" name="file1" /> <input type="submit" value="start upload" /> </form>
  16. Tracking Upload Progress 29 In a separate file, we can

    check the relevant session variables to see how the upload is going: http://lrnja.net/Lhs7jJ array(1) { ["upload_progress_123"]=> array(5) { ["start_time"]=> int(1340542011) ["content_length"]=> int(1529158981) ["bytes_processed"]=> int(1386660589) ["done"]=> bool(false) ["files"]=> array(1) { [0]=> array(7) { ... } } } }
  17. Typehinting 31 We can typehint in PHP, on: • Classes

    • Interfaces • Arrays • ... and now Callable Callable denotes anything that can be called - e.g. a closure, callback or invokable object
  18. Callable Examples 32 function sparkles(Callable $func) { $func(); return "fairy

    dust"; } $ping = function() { echo "ping!"; }; $pong = "pong"; echo sparkles($ping); // ping!fairy dust echo sparkles($pong); Catchable fatal error: Argument 1 passed to sparkles() must be callable, string given, called in /home/lorna/.../callable.php on line 16 and defined in /home/lorna/.../callable.php on line 10
  19. Callable Examples 33 function sparkles(Callable $func) { $func(); return "fairy

    dust"; } class Butterfly { public function __invoke() { echo "flutter"; } } $bee = new Butterfly(); echo sparkles($bee); // flutterfairy dust
  20. Sleep and Wakeup 35 When we serialize() or unserialize() an

    object, PHP provides "magic methods" for us to hook into (this isn’t new): • __sleep() to specify which fields should be serialized • __wakeup() to perform any operations needed to complete an object when it is unserialized This gives us the same feature for when we JSON something
  21. The JsonSerializable Interface 36 From the manual: JsonSerializable { abstract

    public mixed jsonSerialize () } Objects implementing the JsonSerializable interface can control how they are represented in JSON when they are passed to json_encode()
  22. JsonSerializable Example 37 class gardenObject implements JsonSerializable { public function

    jsonSerialize() { unset($this->herbs); return $this; } } $garden = new gardenObject(); $garden->flowers = array("clematis", "geranium", "hydrangea"); $garden->herbs = array("mint", "sage", "chives", "rosemary"); $garden->fruit = array("apple", "rhubarb"); echo json_encode($garden); {"flowers":["clematis","geranium","hydrangea"],"fruit" :["apple","rhubarb"]}
  23. The PHP 5.4 Features I’ll Actually Use 40 • Short

    array syntax • Traits • Built in webserver • Upload progress • Callable • JsonSerializable