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

New Wave PHP

New Wave PHP

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

Lorna Mitchell

October 01, 2014
Tweet

More Decks by Lorna Mitchell

Other Decks in Technology

Transcript

  1. New Wave PHP

    View full-size slide

  2. New Wave PHP

    View full-size slide

  3. New Wave PHP

    View full-size slide

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

    View full-size slide

  5. Anonymous Functions (5.3)
    Declare a function in the place where it is used.
    (you may have seen this in JavaScript)

    View full-size slide

  6. 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");

    View full-size slide

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

    View full-size slide

  8. 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

    View full-size slide

  9. Namespaced Library File
    namespace Lorna;
    class Nonsense {
    protected $words =
    array("wibble", "squeak", "howl", "pop");
    public function speak() {
    return $this->words[
    array_rand($this->words)];
    }
    }

    View full-size slide

  10. Namespaced Calling Code
    include 'lorna/nonsense.php';
    use Lorna\Nonsense;
    $nsense = new Nonsense();
    echo $nsense->speak();
    $other = new \StdClass();

    View full-size slide

  11. PHP's Own Webserver (5.4)
    php -S localhost:8080

    View full-size slide

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

    View full-size slide

  13. 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'];

    View full-size slide

  14. Array Dereferencing (5.4)
    function getList() {
    return ['Grumpy', 'Sleepy', 'Bashful', 'Doc'];
    }
    // grab first item from list
    $item = getList()[0];
    echo $item;

    View full-size slide

  15. Echo Shortcut (5.4)
    PHP 5.4 removes short_open_tag config option
    • is never valid
    • = is always valid

    View full-size slide

  16. Echo Shortcut
    A template saying "hi, "
    Could also be written as:
    A template saying "hi, =$name ?>"

    View full-size slide

  17. Session Upload Progress
    File upload progress, written to the session at
    intervals
    Useful for user feedback, e.g. shiny progress
    bars!

    View full-size slide

  18. Tracking Upload Progress
    User starts uploading file in the usual way
    ?>" value="123" />
    File:

    View full-size slide

  19. 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) { ...
    } } }

    View full-size slide

  20. 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

    View full-size slide

  21. Easy Password Hashing (5.5)
    $pass = "secretpassword";
    $hashed = password_hash($pass, PASSWORD_DEFAULT);
    echo $hashed;
    $2y$10$Q7Rm.Cmcu4lbvI7.C2q4Z.1LLoh4C63vBSfflQtfjs

    View full-size slide

  22. 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

    View full-size slide

  23. Built-in OpCache (5.5)
    Replaces APC - beware this is disabled by
    default.
    Turn on opcache.enable and opcache.enable_cli

    View full-size slide

  24. Upgrading An Existing System

    View full-size slide

  25. Performance Comparison

    View full-size slide

  26. 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

    View full-size slide

  27. 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?

    View full-size slide

  28. 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

    View full-size slide

  29. Drupal 8 and the Future

    View full-size slide

  30. Come to the Future

    View full-size slide

  31. Come to the Future
    PHP now has:
    • even better features
    • great tools
    • improved performance
    • a rich future with tools like Drupal built on
    it

    View full-size slide

  32. Questions? (and resources)
    Intermediate PHP http://lrnja.net/php-video
    Contact me: @lornajane or http://lornajane.net

    View full-size slide