Slide 1

Slide 1 text

New Wave PHP

Slide 2

Slide 2 text

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 September 2015 5.5 June 2013 June 2016 5.6 August 2014 August 2017 7.0 Q4 2015 Release + 3 months

Slide 3

Slide 3 text

New Wave PHP

Slide 4

Slide 4 text

New Wave PHP Data from http://w3techs.com

Slide 5

Slide 5 text

Changes in PHP

Slide 6

Slide 6 text

Register Globals is Gone (5.4) Upgrade PHP and see many undefined (simple) variables. To fix each undefined variable: • replace $username with $_GET['username'] or $_POST['username'] in each case

Slide 7

Slide 7 text

Echo Shortcut (5.4) PHP 5.4 removes short_open_tag config option •

Slide 8

Slide 8 text

Error Reporting: E_STRICT E_ALL includes E_STRICT in PHP 5.4+ You can either: 1. Fix your errors 2. Turn it off again using E_ALL & ~E_STRICT

Slide 9

Slide 9 text

Timezone Settings (5.4) PHP refuses to guess the timezone and will warn you. It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. Fix it by setting date.timezone in php.ini: date.timezone = "Europe/London"

Slide 10

Slide 10 text

Call Time Pass By Reference PHP Fatal error: Call-time pass-by-reference has been removed This error says "don't pass references in when the function didn't expect them, you fool"

Slide 11

Slide 11 text

Call Time Pass By Reference You can pass by reference. Declare function:

Slide 12

Slide 12 text

Traits (5.5) Traits are building blocks for classes Traits can: • build on one another • be used together • are inherited by child classes

Slide 13

Slide 13 text

Traits addRecord($level, $message, $context); } }

Slide 14

Slide 14 text

Traits To use a trait: log("Something went wrong");

Slide 15

Slide 15 text

DateTimeImmutable (5.5) add(new DateInterval('P4D')); print_r($d1); DateTime Object ( [date] => 2015-01-09 10:43:26 ... ) DateTime Object ( [date] => 2015-01-13 10:43:26 ... )

Slide 16

Slide 16 text

DateTimeImmutable add(new DateInterval('P4D')); print_r($d2); DateTime Object ( [date] => 2015-01-09 10:43:26 ... ) DateTime Object ( [date] => 2015-01-09 10:43:26 ... )

Slide 17

Slide 17 text

Easy Password Hashing (5.5) $pass = "secretpassword"; $hashed = password_hash($pass, PASSWORD_DEFAULT); echo $hashed; Output: $2y$10$Q7Rm.Cmcu4lbvI7.C2q4Z.1LLoh4C63vBSfflQtfjs52GxhAc.s/G (you may need to make your password columns larger)

Slide 18

Slide 18 text

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_compa t

Slide 19

Slide 19 text

PHP Generators (5.5) Simpler than iterators - a function returning a sequence of values.

Slide 20

Slide 20 text

PHP Generators Simpler than iterators - a function returning a sequence of values.

Slide 21

Slide 21 text

MySQL is Deprecated (5.5) The original mysql extension now emits E_DEPRECATED warnings. Instead, use: • PDO • The mysqli extension, which is similar to the original mysql one

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

Variadic Functions (5.6) function concatenate($transform, ...$strings) { $string = ''; foreach($strings as $piece) { $string .= $piece; } return($transform($string)); } echo concatenate("strtoupper", "I'd ", "like ", 4 + 2, " apples");

Slide 24

Slide 24 text

Argument Unpacking (5.6) Let PHP unpack your args $email[] = "[email protected]"; $email[] = "Hi there"; $email[] = "Thanks for registering, hope you like it"; // old syntax mail($email[0], $email[1], $email[2]); //new syntax mail(...$email);

Slide 25

Slide 25 text

Argument Unpacking Let PHP unpack your args $email[] = "Hi there"; $email[] = "Thanks for registering, hope you like it"; mail("[email protected]", ...$email);

Slide 26

Slide 26 text

Namespaced Functions (5.6) Have always been able to namespace functions Can now import them, like classes include "Lib/Many/Layers/functions.php"; use function \Lib\Many\Layers\deep_func; deep_func();

Slide 27

Slide 27 text

Upgrading An Existing System

Slide 28

Slide 28 text

Performance Comparison

Slide 29

Slide 29 text

How To Upgrade • Turn on E_DEPRECATED and watch the logs of your existing platform • Use the PHPCompatibility PHPCS standard • Compile new PHP and run test suite • Lint check with new version (php -l) • Run application with PHP's webserver • Upgrade a test/staging platform • Go for it!

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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?

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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