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

Pains and Gains of Upgrading PHP

D33d8bdd9096c80b8d1acca8d28410b5?s=47 Lorna Mitchell
December 03, 2013

Pains and Gains of Upgrading PHP

Features and improvements of PHP versions 5.3, 5.4 and 5.5, along with some performance information and tips for upgrading to the latest and greatest.

D33d8bdd9096c80b8d1acca8d28410b5?s=128

Lorna Mitchell

December 03, 2013
Tweet

Transcript

  1. Pains and Gains of PHP Upgrades Lorna Mitchell, PHPNW December

    2013
  2. About Recent Versions of PHP Version Released End of Life

    5.2 November 2006 January 2011 5.3 June 2009 July 2014 5.4 March 2012 Release + 3 years 5.5 June 2013 Release + 3 years
  3. Current PHP Installations

  4. Pains of Upgrades • cost (time and money) • risk

  5. Gains of Upgrades • shiny new features • better security

    • better performance
  6. Not All Upgrades Are Equal • to 5.3: climbing a

    mountain • to 5.4: flying leap • to 5.5: nobody will notice
  7. to PHP 5.3

  8. PHP 5.3 is Full of Goodness • namespaces

  9. PHP Namespaces Namespaces allow modularity and separation • classes, constants

    and functions belong in namespaces • namespaces can be nested • much easier pick-and-mix of frameworks/libraries • avoids naming collision • key ingredient for PSR-0
  10. Namespaced Library File <?php namespace Lorna; class Nonsense { protected

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

    new Nonsense(); echo $nsense->speak(); $other = new \StdClass();
  12. PHP 5.3 is Full of Goodness • namespaces • anonymous

    functions
  13. Anonymous Functions <?php $things = array("name" => "Alice", "colour" =>

    "Blue", "origin" => "Dreams"); function formatit($value, $key) { echo $key . ": " . $value . "\n"; } array_walk($things, "formatit");
  14. Anonymous Functions <?php $things = array("name" => "Alice", "colour" =>

    "Blue", "origin" => "Dreams"); array_walk($things, function ($value, $key) { echo $key . ": " . $value . "\n"; });
  15. PHP 5.3 is Full of Goodness • namespaces • anonymous

    functions • better DateTime • SPL data structures • works on Windows • E_DEPRECATED error reporting level • late static binding • __DIR__
  16. Upgrading to 5.3: Gotchas new reserved words: namespace, goto log

    message changes requires MySQL > 4.1 full info: http://lrnja.net/ZpvknE (php.net)
  17. to PHP 5.4

  18. PHP 5.4 is a Leap to the Future • improved

    performance, reduced memory footprint
  19. PHP Performance

  20. PHP 5.4 is a Leap to the Future • improved

    performance, reduced memory footprint • built-in webserver
  21. PHP's Own Webserver php -S dev.project.local:8080 -t /var/www/cool-project/web -c php-ini.development

    routing.php
  22. PHP 5.4 is a Leap to the Future • improved

    performance, reduced memory footprint • built-in webserver • traits
  23. Simple Traits Example <?php trait Audit { public function getAuditTrail()

    { return "nothing changed"; } } class Princess { use Audit; // General princess class description: // soldering, tree climbing, the usual }
  24. Simple Traits Example <?php $daisy = new Princess(); echo $daisy->getAuditTrail();

  25. PHP 5.4 is a Leap to the Future • improved

    performance, reduced memory footprint • built-in webserver • short array notation, array dereferencing
  26. Short Array Notation <?php $game[0] = 'paper'; $game[1] = 'scissors';

    $game[2] = 'stone'; $game = array(0 => 'stone', 1 => 'paper', 2 => 'scissors'); $game = [0 => 'scissors', 1 => 'stone', 2 => 'paper'];
  27. PHP 5.4 is a Leap to the Future • improved

    performance, reduced memory footprint • built-in webserver • traits • short array notation, array dereferencing • less nonsense
  28. Upgrading to PHP 5.4: Gotchas new reserved words: trait callable

    insteadof no register_globals, short open tag etc turn on E_DEPRECATED on your 5.3 platform compile PHP 5.4 and use the webserver
  29. Upgrading to PHP 5.4: Gotchas new reserved words: trait callable

    insteadof no register_globals, short open tag etc turn on E_DEPRECATED on your 5.3 platform compile PHP 5.4 and use the webserver beware APC issues
  30. to PHP 5.5

  31. PHP 5.5: Better Again • password hashing features

  32. Easy Password Hashing <?php $pass = "secretpassword"; $hashed = password_hash($pass,

    PASSWORD_DEFAULT); echo $hashed; $2y$10$Q7Rm.Cmcu4lbvI7.C2q4Z.1LLoh4C63vBSffl
  33. Easy Password Hashing <?php $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
  34. PHP 5.5: Better Again • password hashing features • generators

  35. PHP Generators Simpler than iterators - a function returning a

    sequence of values. <?php function getValues() { // totally trivial example yield "Apple"; yield "Ball"; yield "Cat"; }
  36. PHP Generators Simpler than iterators - a function returning a

    sequence of values. <?php $stuff = getValues(); foreach($stuff as $thing) { echo $thing . "\n"; }
  37. PHP 5.5: Better Again • password hashing features • generators

    • try/catch/finally
  38. Try/Catch/Finally Finally is a clause that always gets run <?php

    try{ $fp = fopen("textfile.txt", "w+"); // do stuff } catch (Exception $e) { echo "Stuff went wrong"; } finally { // either way, close the file fclose($fp); }
  39. None
  40. PHP 5.5: Better Again • password hashing features • generators

    • try/catch/finally • built-in opcode cache • Turn on opcache.enable and opcache.enable_cli • use APCu https://github.com/krakjoe/apcu
  41. Upgrading to PHP 5.5 • turn on E_DEPRECATED on your

    5.4 platform • compile PHP 5.5 and use the webserver
  42. In Summary

  43. Upgrade, FFS

  44. General Upgrade Plan • check the changelog: http://php.net/ChangeLog-5.php • turn

    on E_DEPRECATED • test with the webserver, run unit tests with new binary • upgrade test platform • pecl extensions will need a reinstall • go for it :)
  45. Any Questions? Contact me • @lornajane • http://lornajane.net

  46. Appendices

  47. PHP Version Adoption • Version 5.3 52.2% • Version 5.2

    35.3% • Version 5.4 9.8% • Version 5.1 1.9% • Version 5.5 0.7% • Version 5.0 0.1% • Version 5.6 < 0.1% (From http://w3techs.com, 1 December 2013)
  48. PHP Performance Comparisons Average time to run bench.php on my

    laptop • 5.2.17: 3.77 seconds • 5.3.23: 2.63 seconds • 5.4.15: 1.98 seconds • 5.5RC1: 2.11 seconds