New Wave PHP

New Wave PHP

DrupalCon Amsterdam session on features in PHP 5.4, 5.4 and beyond.

D33d8bdd9096c80b8d1acca8d28410b5?s=128

Lorna Mitchell

October 01, 2014
Tweet

Transcript

  1. None
  2. New Wave PHP

  3. New Wave PHP

  4. New Wave PHP

  5. New Shiny

  6. Magic DIR Constant (5.3) Instead of: dirname(__FILE__); Now you can

    use: __DIR__;
  7. Anonymous Functions (5.3) Declare a function in the place where

    it is used. (you may have seen this in JavaScript)
  8. Anonymous Functions The old way: $things = array("name" => "Alice",

    "colour" => "Blue", "origin" => "Dreams"); function formatit($value, $key) { echo $key . ": " . $value . "\n"; } array_walk($things, "formatit");
  9. Anonymous Functions Using an anonymous function: $things = array("name" =>

    "Alice", "colour" => "Blue", "origin" => "Dreams"); array_walk($things, function ($value, $key) { echo $key . ": " . $value . "\n"; });
  10. Namespaces (5.3) Namespaces are for combining libraries in one project.

    • we keep our own code in its own namespace(s) • we can pick-and-mix other people's code • class names don't have crazy long prefixes • combined with PSR standards, they enable Composer
  11. Namespaced Library File namespace Lorna; class Nonsense { protected $words

    = array("wibble", "squeak", "howl", "pop"); public function speak() { return $this->words[ array_rand($this->words)]; } }
  12. Namespaced Calling Code include 'lorna/nonsense.php'; use Lorna\Nonsense; $nsense = new

    Nonsense(); echo $nsense->speak(); $other = new \StdClass();
  13. PHP's Own Webserver (5.4) php -S localhost:8080

  14. PHP's Own Webserver php -S dev.project.local:8080 -t /var/www/cool-project/web -c php-ini.development

    routing.php
  15. Short Array Notation (5.4) Three sets of equivalent notation: $game

    = array(0 => 'stone', 1 => 'paper', 2 => 'scissors'); $game[0] = 'paper'; $game[1] = 'scissors'; $game[2] = 'stone'; $game = [0 => 'scissors', 1 => 'stone', 2 => 'paper'];
  16. None
  17. Array Dereferencing (5.4) function getList() { return ['Grumpy', 'Sleepy', 'Bashful',

    'Doc']; } // grab first item from list $item = getList()[0]; echo $item;
  18. Echo Shortcut (5.4) PHP 5.4 removes short_open_tag config option •

    <? is never valid • <?= is always valid
  19. Echo Shortcut <p>A template saying "hi, <?php echo $name ?>"</p>

    Could also be written as: <p>A template saying "hi, <?=$name ?>"</p>
  20. Session Upload Progress File upload progress, written to the session

    at intervals Useful for user feedback, e.g. shiny progress bars!
  21. Tracking Upload Progress User starts uploading file in the usual

    way <form name="upload" method="post" enctype="multipart/f <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>
  22. Tracking Upload Progress 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) { ... } } }
  23. Less Nonsense (5.4) Removed in PHP 5.4: • register_globals •

    register_long_arrays • safe_mode • magic_quotes • allow_call_time_pass_reference • y2k_compliance • ereg* functions
  24. Easy Password Hashing (5.5) $pass = "secretpassword"; $hashed = password_hash($pass,

    PASSWORD_DEFAULT); echo $hashed; $2y$10$Q7Rm.Cmcu4lbvI7.C2q4Z.1LLoh4C63vBSfflQtfjs
  25. Easy Password Hashing $existing_hash = '$2y$10$Q7Rm.Cmcu4lbvI7.C2q4Z.1LLoh4C $pass = "secretpassword"; if(password_verify($pass,

    $existing_hash)) echo "All good"; else echo "Go away"; For PHP < 5.5: http://github.com/ircmaxell/password_compat
  26. Built-in OpCache (5.5) Replaces APC - beware this is disabled

    by default. Turn on opcache.enable and opcache.enable_cli
  27. Upgrading An Existing System

  28. Performance Comparison

  29. How To Upgrade 1. Turn on E_DEPRECATED on your current

    platform and watch the logs (PHP 5.3+) 2. Compile PHP and run test suite with target version 3. Run application with PHP's webserver (PHP 5.4+) 4. Upgrade a test/staging platform 5. Go for it
  30. Finding Platforms New projects should be PHP 5.5 or later.

    Questions to ask: • What versions of PHP are available? • Are backups included? • Which extensions are available, and can I add others? • Can I get support with my PHP setup?
  31. Unofficial List of Providers • Servergrove http://www.servergrove.com/ • Linode https://www.linode.com/

    • Digital Ocean https://www.digitalocean.com/ • Siteground http://www.siteground.com/ • Rackspace http://rackspace.com
  32. Drupal 8 and the Future

  33. Come to the Future

  34. Come to the Future PHP now has: • even better

    features • great tools • improved performance • a rich future with tools like Drupal built on it
  35. Questions? (and resources) Intermediate PHP http://lrnja.net/php-video Contact me: @lornajane or

    http://lornajane.net
  36. None