PHP 5.6: New and Deprecated Features Mark Niebergall https://joind.in/13884
About Mark Niebergall ● Developing in PHP since 2005 ● Masters degree in Information Systems ● Senior Software Engineer and Team Lead ● Occupational health screening project ● Security: SSCP, CSSLP Certified ● PHP, databases, JavaScript ● Enjoy being outdoors
Supported Versions See http://php.net/supported-versions.php
State of PHP ● PHP 5.3.29 EOL for PHP 5.3 release August 14, 2014 ● PHP 5.4.40 released April 16, 2015, aging but still heavily used ● PHP 5.5.24 is current, many servers running PHP 5.5.X ● PHP 5.6.8 released April 16, 2015 ● PHP 5.6.0 available since August 28, 2014 ● PHP 5.7 is under development ● PHP 7.0 is under development o PHP 6 unicode, branched but will never have production release o Vote for version 6 vs 7, decided on 7 o Focused on performance o More compact data structures - easier for JIT compiler o Improved variable syntax (see https://wiki.php.net/rfc/uniform_variable_syntax)
Live Demo Setup ● 2 vagrant virtual machines with puppet o 1 with PHP 5.5.8 o 1 with PHP 5.6.0 o Automatic code sync so same code resides on both web servers See https://qa.php.net/howtohelp.php
PHP 5.6 Incompatible Out With The Old ● Array keys won't be overwritten when defining an array as a property of a class via an array literal Source: http://us1.php.net/manual/en/migration56.incompatible.php
PHP 5.6 Incompatible Out With The Old ● json_decode strictness ● Stream wrappers now verify peer certificates and host names by default when using SSL/TLS ● GMP (GNU Multiple Precision Arithmetic Library) resources are now objects ● Mcrypt functions now require valid keys and initialization vectors Source: http://us1.php.net/manual/en/migration56.incompatible.php
PHP 5.6 Deprecated On the way Out ● Calling a method from an incompatible context
PHP 5.6 Deprecated On the way Out ● $HTTP_RAW_POST_DATA and always_populate_raw_post_data o use php://input instead (file_get_contents('php://input')) o php://input is now reusable Source: http://us1.php.net/manual/en/migration56.deprecated.php
PHP 5.6 Deprecated On the way Out ● iconv and mbstring encoding settings o default_charset with UTF-8 as default value o iconv.input_encoding, iconv.output_encoding, iconv.internal_encoding o mbstring.http_input, mbstring.http_output, mbstring.internal_encoding Source: http://us1.php.net/manual/en/migration56.deprecated.php
PHP 5.6 Changed Changed functionality ● crypt() will now raise an E_NOTICE error if no salt parameter
PHP 5.6 Changed Changed functionality ● substr_compare() will now accept 0 for its length parameter
PHP 5.6 Changed Changed functionality ● unserialize() will now fail if passed serialized data that has been manipulated to attempt to instantiate an object without calling its constructor ● cURL @file vs CURLFile ● Mcrypt source default value for mcrypt_create_iv ● PostgreSQL functions no longer experimental (ex: pg_insert) ● PostgreSQL pg_send_* no longer block until query write completion ● ReflectionClass::newInstanceWithoutConstructor() now allows non-final internal classes to be instantiated ● XMLReader::getAttributeNs() and XMLReader::getAttributeNo() now return NULL if the attribute could not be found, like XMLReader::getAttribute() Source: http://us1.php.net/manual/en/migration56.changed-functions.php
PHP 5.6 New Functions New functions ● GMP: gmp_root(), gmp_rootrem() ● LDAP: ldap_escape(), ldap_modify_batch() ● MySQLi: mysqli_get_links_stats() ● OCI8: oci_get_implicit_resultset() ● OpenSSL: openssl_get_cert_locations(), openssl_x509_fingerprint(), openssl_spki_new(), openssl_spki_verify(), openssl_spki_export_challenge(), openssl_spki_export() Source: http://us1.php.net/manual/en/migration56.new-functions.php
PHP 5.6 New Functions New functions (continued) ● PostgreSQL: pg_connect_poll(), pg_consume_input(), pg_flush(), pg_socket() ● PDO_PGSQL: PDO::pgsqlGetNotify(), PDO::pgsqlGetPid() ● Zip: ZipArchive::setPassword() Source: http://us1.php.net/manual/en/migration56.new-functions.php
PHP 5.6 New Features New stuff ● Constant scalar expressions
PHP 5.6 New Features New stuff ● Variadic functions
PHP 5.6 New Features New stuff ● Argument unpacking using … ● AKA Splat
PHP 5.6 New Features New stuff ● Exponentiation via **
PHP 5.6 New Features New stuff ● use const and use function
PHP 5.6 New Features New stuff ● Upload file > 2GB o Sorry, not going to show this one
PHP 5.6 New Features New stuff ● GMP now supports operator overloading
PHP 5.6 New Features New stuff ● hash_equals: Timing attack safe string comparison
PHP 5.6 New Features New stuff ● Magic method __debugInfo: Define output for var_dump of class
Testing PHP builds PHP QA ● Testing overview at https://qa.php.net/ ● Test a build o wget http://downloads.php.net/tyrael/php-5.6.9RC1.tar.gz o tar xvzf php-5.6.9RC1.tar.gz o cd php-5.6.9RC1 o ./configure o make test ● Write testcases ● Give PHP QA team server time See https://qa.php.net/howtohelp.php
Testing PHP builds PHP QA
Testing PHP builds PHP QA
Questions? ● https://joind.in/13884

PHP 5.6 New and Deprecated Features

  • 1.
    PHP 5.6: Newand Deprecated Features Mark Niebergall https://joind.in/13884
  • 2.
    About Mark Niebergall ●Developing in PHP since 2005 ● Masters degree in Information Systems ● Senior Software Engineer and Team Lead ● Occupational health screening project ● Security: SSCP, CSSLP Certified ● PHP, databases, JavaScript ● Enjoy being outdoors
  • 3.
  • 4.
    State of PHP ●PHP 5.3.29 EOL for PHP 5.3 release August 14, 2014 ● PHP 5.4.40 released April 16, 2015, aging but still heavily used ● PHP 5.5.24 is current, many servers running PHP 5.5.X ● PHP 5.6.8 released April 16, 2015 ● PHP 5.6.0 available since August 28, 2014 ● PHP 5.7 is under development ● PHP 7.0 is under development o PHP 6 unicode, branched but will never have production release o Vote for version 6 vs 7, decided on 7 o Focused on performance o More compact data structures - easier for JIT compiler o Improved variable syntax (see https://wiki.php.net/rfc/uniform_variable_syntax)
  • 5.
    Live Demo Setup ● 2vagrant virtual machines with puppet o 1 with PHP 5.5.8 o 1 with PHP 5.6.0 o Automatic code sync so same code resides on both web servers See https://qa.php.net/howtohelp.php
  • 6.
    PHP 5.6 Incompatible OutWith The Old ● Array keys won't be overwritten when defining an array as a property of a class via an array literal Source: http://us1.php.net/manual/en/migration56.incompatible.php
  • 7.
    PHP 5.6 Incompatible OutWith The Old ● json_decode strictness ● Stream wrappers now verify peer certificates and host names by default when using SSL/TLS ● GMP (GNU Multiple Precision Arithmetic Library) resources are now objects ● Mcrypt functions now require valid keys and initialization vectors Source: http://us1.php.net/manual/en/migration56.incompatible.php
  • 8.
    PHP 5.6 Deprecated Onthe way Out ● Calling a method from an incompatible context
  • 9.
    PHP 5.6 Deprecated Onthe way Out ● $HTTP_RAW_POST_DATA and always_populate_raw_post_data o use php://input instead (file_get_contents('php://input')) o php://input is now reusable Source: http://us1.php.net/manual/en/migration56.deprecated.php
  • 10.
    PHP 5.6 Deprecated Onthe way Out ● iconv and mbstring encoding settings o default_charset with UTF-8 as default value o iconv.input_encoding, iconv.output_encoding, iconv.internal_encoding o mbstring.http_input, mbstring.http_output, mbstring.internal_encoding Source: http://us1.php.net/manual/en/migration56.deprecated.php
  • 11.
    PHP 5.6 Changed Changedfunctionality ● crypt() will now raise an E_NOTICE error if no salt parameter
  • 12.
    PHP 5.6 Changed Changedfunctionality ● substr_compare() will now accept 0 for its length parameter
  • 13.
    PHP 5.6 Changed Changedfunctionality ● unserialize() will now fail if passed serialized data that has been manipulated to attempt to instantiate an object without calling its constructor ● cURL @file vs CURLFile ● Mcrypt source default value for mcrypt_create_iv ● PostgreSQL functions no longer experimental (ex: pg_insert) ● PostgreSQL pg_send_* no longer block until query write completion ● ReflectionClass::newInstanceWithoutConstructor() now allows non-final internal classes to be instantiated ● XMLReader::getAttributeNs() and XMLReader::getAttributeNo() now return NULL if the attribute could not be found, like XMLReader::getAttribute() Source: http://us1.php.net/manual/en/migration56.changed-functions.php
  • 14.
    PHP 5.6 NewFunctions New functions ● GMP: gmp_root(), gmp_rootrem() ● LDAP: ldap_escape(), ldap_modify_batch() ● MySQLi: mysqli_get_links_stats() ● OCI8: oci_get_implicit_resultset() ● OpenSSL: openssl_get_cert_locations(), openssl_x509_fingerprint(), openssl_spki_new(), openssl_spki_verify(), openssl_spki_export_challenge(), openssl_spki_export() Source: http://us1.php.net/manual/en/migration56.new-functions.php
  • 15.
    PHP 5.6 NewFunctions New functions (continued) ● PostgreSQL: pg_connect_poll(), pg_consume_input(), pg_flush(), pg_socket() ● PDO_PGSQL: PDO::pgsqlGetNotify(), PDO::pgsqlGetPid() ● Zip: ZipArchive::setPassword() Source: http://us1.php.net/manual/en/migration56.new-functions.php
  • 16.
    PHP 5.6 NewFeatures New stuff ● Constant scalar expressions
  • 17.
    PHP 5.6 NewFeatures New stuff ● Variadic functions
  • 18.
    PHP 5.6 NewFeatures New stuff ● Argument unpacking using … ● AKA Splat
  • 19.
    PHP 5.6 NewFeatures New stuff ● Exponentiation via **
  • 20.
    PHP 5.6 NewFeatures New stuff ● use const and use function
  • 21.
    PHP 5.6 NewFeatures New stuff ● Upload file > 2GB o Sorry, not going to show this one
  • 22.
    PHP 5.6 NewFeatures New stuff ● GMP now supports operator overloading
  • 23.
    PHP 5.6 NewFeatures New stuff ● hash_equals: Timing attack safe string comparison
  • 24.
    PHP 5.6 NewFeatures New stuff ● Magic method __debugInfo: Define output for var_dump of class
  • 25.
    Testing PHP builds PHPQA ● Testing overview at https://qa.php.net/ ● Test a build o wget http://downloads.php.net/tyrael/php-5.6.9RC1.tar.gz o tar xvzf php-5.6.9RC1.tar.gz o cd php-5.6.9RC1 o ./configure o make test ● Write testcases ● Give PHP QA team server time See https://qa.php.net/howtohelp.php
  • 26.
  • 27.
  • 28.