Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Tout sur PHP 7.3 et ses RFC

109 views

Published on

PHP 7.3 sera en beta à la fin de l'été, et cible une sortie avant Noel. De nombreuses nouveautés sont prévues de longue date, comme l'évolution de la syntaxe heredoc, ou les , finales pour les appels de fonctions, tandis qu'une rafale de nouveautés se bousculent au portillon, et ont même
généré une alpha 4. Nous passerons en revue toutes ces évolutions, ainsi que les incompatibilités, comment les trouver dans du code, et comment fonctionnent les RFC de PHP.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Tout sur PHP 7.3 et ses RFC

  1. 1. PHP 7.3 AND ITS RFC PHP 7.3 beta 1 PHP Québec - 2018 - Montréal, QC, Canada
  2. 2. AGENDA • PHP 7.3 • Nouveautés, incompatibilités • Comment migrer • les RFC
  3. 3. SPEAKER • Damien Seguy • Exakat CTO • Analyse statique pour PHP
  4. 4. PROGRAMME • 1er aout 2018 : Feature freeze • 2 aout 2018 : beta 1 • 13 septembre 2018 : RC1 • 13 décembre 2018 : 7.3.0
  5. 5. EVOLUTIONS MAJEURES
  6. 6. GARBAGE COLLECTOR AMÉLIORÉ // Very, very, very many objects GC | OLD | NEW disabled | 1.32s | 1.50s enabled | 12.75s | 2.32s // Very many objects GC | OLD | NEW disabled | 0.87s | 0.87s enabled | 1.48s | 0.94s // Less many objects GC | OLD | NEW disabled | 1.65s | 1.62s enabled | 1.75s | 1.62s • 10% de pertes si désactivé • Si peu d'objects, peu de gains • Si beaucoup d'objets, beaucoup de gain • La plupart des scripts n'utilisent pas le GC
  7. 7. RELAXED HEREDOC/NOWDOC <?php class foo { public $bar = <<<EOT bar EOT; } <?php function foo($arg) { $bar = <<<'EOT' bar$arg EOT; }
  8. 8. RELAXED HEREDOC/NOWDOC <?php class foo { public $bar = <<<EOT bar EOT; } "bar"
  9. 9. • Tabulations or spaces • Don't mix them! RELAXED HEREDOC/NOWDOC <?php class foo { public $bar = <<<EOT bar EOT; } " bar"
  10. 10. • Trailing comma • Comme pour les tableaux • Le dernier élément peut être vide • Seulement applicable au dernier element • Valable pour les méthodes et les fonctions • Pratique pour éviter les diff trop longs VIRGULE TERMINALE foo( $foo, $bar, $baz, );
  11. 11. PLUS DE CONSTANTES INSENSIBLES À LA CASSE namespace { define('NSFOO', 42, true); 
 // constante insensible à la casse }   namespace Test { use const NSFOO; var_dump(FOO); // OK var_dump(foo); // Warning }
  12. 12. PLUS DE CONSTANTES INSENSIBLES À LA CASSE • Les conventions sont de faire des constantes en majuscules et de les utiliser en majuscule • Les constantes sont de plus en plus définies avec const, et non plus avec define() • null, true, false seront des mots réservés en PHP 8 • Il reste les fonctions insensibles à la casse
  13. 13. INFRASTRUCTURE
  14. 14. NOUVEAU SQLITE3 • Version 3.24 • Ajout du support de UPSERT • UPSERT = INSERT or UPDATE • An UPSERT is an ordinary INSERT statement that is followed by the special ON CONFLICT clause shown above. • REPLACE = INSERT or OVERWRITE
  15. 15. NEW PCRE VERSION : 2.0! • PHP 7.2 utilise PCRE1 • PHP 7.3 utilise PCRE2 • Beaucoup de nouveautés, peu d'incompatibilité • les options X et S disparaissent • Plus de vérifications à la compilation
  16. 16. EVOLUTIONS MINEURES
  17. 17. JSON_ENCODE ÉMET DES EXCEPTIONS • json_encode/json_decode peuvent retourner NULL , false, chaîne vide • Comment faire la différence entre une erreur et un encodage correct ? • nouvelle option : JSON_THROW_ON_ERROR, à utiliser avec un try{} catch • A suivre…
  18. 18. COMPACT SIGNALE LES VARIABLES NON DÉFINIES $foo = 'bar';   $baz = compact('foo', 'foz'); // Notice: compact(): Undefined variable: foz
  19. 19. NET_GET_INTERFACES() • Liste les interfaces réseaux disponibles. • Permet de lire les informations système. Array ( [lo0] => Array ( [unicast] => Array ( [0] => Array ( [flags] => 32841 [family] => 18 ) [1] => Array ( [flags] => 32841 [family] => 30 [address] => ::1 [netmask] => ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff ) [2] => Array ( [flags] => 32841 [family] => 2 [address] => 127.0.0.1 [netmask] => 255.0.0.0 ) [3] => Array ( [flags] => 32841 [family] => 30 [address] => fe80::1 [netmask] => ffff:ffff:ffff:ffff:: ) ) ) [gif0] => Array
  20. 20. IS_COUNTABLE • is_countable() vérifie qu'une variable peut être comptée avec count() • un array() ou un objet avec l'interface Countable
  21. 21. SAME SITE COOKIE • setcookie • setrawcookie • session_set_cookie_params • session_get_cookie_params void session_set_cookie_params ( int $lifetime 
 [, array $options ] ) Set-Cookie: key=value; path=/; domain=example.org; HttpOnly; SameSite=Lax
  22. 22. LIST() WITH REFERENCE $array = [1, 2]; list($a, &$b) = $array; $array = [1, 2]; $a = $array[0]; $b =& $array[1];
  23. 23. LIST() WITH REFERENCE $array = [[1, 2], [3, 4]]; foreach ($array as list(&$a, $b)) { $a = 7; } var_dump($array)
  24. 24. REMOVED FEATURES • image2wbmp • imagefromstring() support webp désormais • alias mbstring() qui ne sont pas documentés • Définition d'une fonction assert() • Recherche dans une chaîne avec des entiers
  25. 25. PREMIÈRE CLÉ D'UN TABLEAU // usage of an associative array $array = ['a' => 1, 'b' => 2, 'c' => 3];
  26. 26. PREMIÈRE CLÉ D'UN TABLEAU // usage of an associative array $array = ['a' => 1, 'b' => 2, 'c' => 3];   $firstKey = array_keys($array)[0]; $lastKey = array_keys($array)[count($array) - 1];
  27. 27. ARRAY_KEY_LAST, ARRAY_KEY_FIRST // usage of an associative array $array = ['a' => 1, 'b' => 2, 'c' => 3];   $firstKey = array_key_first($array); $lastKey = array_key_last($array);   assert($firstKey === 'a'); assert($lastKey === 'c');
  28. 28. DIVERS • Retrait du support de BeOS • FILTER_SANITIZE_ADD_SLASHES
  29. 29. RFC
  30. 30. RFC : COMMENT CA MARCHE
  31. 31. RFC : COMMENT CA MARCHE • Under Discussion • In draft • Pending Implementation • For PHP 8.0 • PHP 7.3 • PHP 7.2…
  32. 32. RFC : COMMENT CA MARCHE • Under Discussion • In draft • Pending Implementation • For PHP 8.0 • PHP 7.3 • PHP 7.2…
  33. 33. MERCI! @EXAKAT - HTTP://WWW.EXAKAT.IO/

×