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.

of

Tout pour se préparer à PHP 7.4 Slide 1 Tout pour se préparer à PHP 7.4 Slide 2 Tout pour se préparer à PHP 7.4 Slide 3 Tout pour se préparer à PHP 7.4 Slide 4 Tout pour se préparer à PHP 7.4 Slide 5 Tout pour se préparer à PHP 7.4 Slide 6 Tout pour se préparer à PHP 7.4 Slide 7 Tout pour se préparer à PHP 7.4 Slide 8 Tout pour se préparer à PHP 7.4 Slide 9 Tout pour se préparer à PHP 7.4 Slide 10 Tout pour se préparer à PHP 7.4 Slide 11 Tout pour se préparer à PHP 7.4 Slide 12 Tout pour se préparer à PHP 7.4 Slide 13 Tout pour se préparer à PHP 7.4 Slide 14 Tout pour se préparer à PHP 7.4 Slide 15 Tout pour se préparer à PHP 7.4 Slide 16 Tout pour se préparer à PHP 7.4 Slide 17 Tout pour se préparer à PHP 7.4 Slide 18 Tout pour se préparer à PHP 7.4 Slide 19 Tout pour se préparer à PHP 7.4 Slide 20 Tout pour se préparer à PHP 7.4 Slide 21 Tout pour se préparer à PHP 7.4 Slide 22 Tout pour se préparer à PHP 7.4 Slide 23 Tout pour se préparer à PHP 7.4 Slide 24 Tout pour se préparer à PHP 7.4 Slide 25 Tout pour se préparer à PHP 7.4 Slide 26 Tout pour se préparer à PHP 7.4 Slide 27 Tout pour se préparer à PHP 7.4 Slide 28 Tout pour se préparer à PHP 7.4 Slide 29 Tout pour se préparer à PHP 7.4 Slide 30 Tout pour se préparer à PHP 7.4 Slide 31 Tout pour se préparer à PHP 7.4 Slide 32 Tout pour se préparer à PHP 7.4 Slide 33 Tout pour se préparer à PHP 7.4 Slide 34 Tout pour se préparer à PHP 7.4 Slide 35 Tout pour se préparer à PHP 7.4 Slide 36 Tout pour se préparer à PHP 7.4 Slide 37 Tout pour se préparer à PHP 7.4 Slide 38 Tout pour se préparer à PHP 7.4 Slide 39 Tout pour se préparer à PHP 7.4 Slide 40 Tout pour se préparer à PHP 7.4 Slide 41 Tout pour se préparer à PHP 7.4 Slide 42 Tout pour se préparer à PHP 7.4 Slide 43
Upcoming SlideShare
What to Upload to SlideShare
Next
Download to read offline and view in fullscreen.

0 Likes

Share

Download to read offline

Tout pour se préparer à PHP 7.4

Download to read offline

Déjà, PHP 7.4 toque à la porte, et il arrive les bras chargés de fonctionnalités et de modernisations. Que ce soit les FFI, le support du typage pour les propriétés, l’abandon des nombres real, la covariance, et même la modernisation de strip_tags, array_merge sans argument, et l’imbrication d’opérateurs ternaires : ouf, il va falloir se retrousser les manches. Durant la session, nous passerons en revue les nouvelles fonctionnalités, les incompatibilités, et nous verrons comment préparer son code dès maintenant.

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to like this

Tout pour se préparer à PHP 7.4

  1. 1. TOUT POUR SE PRÉPARER À PHP 7.4 Avec la participation de PaulVerlaine
  2. 2. PROGRAMME • Incompatibilités • Nouveautés • Divers
  3. 3. QUI PARLE? • Damien Seguy • CTO @exakat • Analyse statique PHP • Maison de retraite à éléphpants • Record mondial du nombre d'antennes AFUP visitées
  4. 4. AGENDA • PHP 7.4.0 RC4 • PHP 7.4.0 RC5 : 31 octobre 2019 • Compilez PHP • https://github.com/php/php-src • https://bugs.php.net/ • Compilez votre code : php -l • php paralell lint 28 nov 2019
  5. 5. INCOMPATIBILITÉS
  6. 6. TERNAIRES IMBRIQUÉS <?php 1 ? 2 :  3 ?  4 : 5;  //  (1 ? 2 : 3) ? 4 : 5;  // ok 1 ? 2 : (3 ?  4 : 5); // ok 1 ? 2 ?  3 :  4 : 5;  // ok ?>
  7. 7. EXIT LES SHORTTAG <? phpinfo(); ?><?php <? phpinfo(); ?><?php • Les balises de fin de document changent
  8. 8. PRÉSÉANCE + ET . <?php echo 'Nous étions le '. date('d') - 7  . ' mars'; echo 'Nous étions le '. (date('d') - 7) . ' mars'; ?> • Valable aussi pour << >> • *, **, % sont inchangés
  9. 9. ACCÈSTABLEAUX ACCOLADES <?php  $string = 'abc';  echo $string[1];  echo $string{2};  ?> PHP Deprecated: Array and string offset access syntax with curly braces is deprecated
  10. 10. ACCÈSTABLEAU AUX SCALAIRES <?php $integer = 1; echo $integer[1]; $string = 'abc'; echo $string[1]; ?> PHP Notice: Trying to access array offset on value of type int
  11. 11. PLUS DE REAL <?php  $string = '1.2';  $real  = (real)  $string; $float  = (float) $string; ?> • Uniquement du float • is_real() et (real) PHP Deprecated: The (real) cast is deprecated, use (float) instead
  12. 12. ARRAY_KEY_EXISTS() Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead <?php  $objet = new stdclass; $objet->p = 1; var_dump(array_key_exists('p', $objet)); ?> • array_key_exists() a été accéléré
  13. 13. MODERNISATIONS
  14. 14. SÉPARATEUR NUMÉRIQUE <?php 6.674_083e-11;  // float 22_99_79_24_58;   // decimal 0xCAFE_F00D;    // hexadecimal 0B0101_1111;    // binaire ?>
  15. 15. SÉPARATEUR NUMÉRIQUE <?php const _21_ = 22; echo  _21_; ?>
  16. 16. PROPRIÉTÉSTYPÉES <?php class User {     public int $id;     public string $name; public Stdclass $x; } ?>
  17. 17. PROPRIÉTÉSTYPÉES <?php  class User {      public Stdclass $x;          function foo() {         $this->x = new Stdclass;     } }  $a = new User; $a->foo(); var_dump($a->x); ?> Fatal error: Uncaught Error: Typed property User::$x must not be accessed before initialization
  18. 18. OPÉRATEUR … POUR ARRAY <?php $parts = ['PHP', 'elephpant', ]; $afup  = ['forum', 'antennes', ...$parts, 'génial']; // ['PHP', 'elephpant', 'forum', 'antennes', 'génial' ?> • Ne marche pas avec des hash
  19. 19. FONCTIONS FLÈCHÉES <?php $puissance = 2; $valeurs = [1, 2, 3, 4]; $carres = array_map( fn($n) => $n ** $puissance,  $valeurs ); // $carres = array(1, 4, 9, 16); ?>
  20. 20. FONCTIONS FLÈCHÉES <?php $puissance = 2; $valeurs = [1, 2, 3, 4]; $closure = function (&$n, $k) use ($puissance) {    $n = $n ** $puissance; }; array_map($valeurs, $closure); ?>
  21. 21. CONTRAVARIANT COVARIANT <?php   // class/interface b extends a {} class c1 {      function foo(b $arg) : a {}  }  class c2 extends c1 {      function foo(b $arg) : a {}  } 
  22. 22. CONTRAVARIANT COVARIANT <?php    // class/interface b extends a {} class c1 {       function foo(a $arg) : b {}   }   class c2 extends c1 {       function foo(b $arg) : a {}   }  Fatal error: Declaration of b::foo(a2 $arg): b1 must be compatible with a::foo(b1 $arg): a2 in test.php on line 10
  23. 23. <?php  // class/interface b extends a {} class c1 {     function foo(b $arg) : a {} } class c2 extends c1 {     function foo(a $arg) : b {} } CONTRAVARIANT COVARIANT
  24. 24. CONTRAVARIANT COVARIANT 1.Toutes les définitions le même fichier 2.L'autoload est obligatoire • Moins de vérifications avec le lint PHP Fatal error: Could not check compatibility between UserFactory::make(object $arg): User and Factory::make(User $arg): object, because class User is not available
  25. 25. ??= <?php $res = shell_exec($cmd) ?? ''; function foo($arg) {   $arg = $arg ?? '';   $arg ??= ''; } foo($arg); bar($arg ?? ''); ?>
  26. 26. ARRAY_MERGE() <?php $rows = [[1,2,3], [4,5,6]]; $list = array_merge(...$rows); $rows = []; $list = array_merge(...$rows); ?>
  27. 27. RÉFÉRENCES FAIBLES <?php $obj = new stdClass; $weakref = WeakReference::create($obj); var_dump($weakref->get()); unset($obj); var_dump($weakref->get()); ?>
  28. 28. RÉFÉRENCES FAIBLES • PHP conserve tous les objets qui sont référencés en mémoire • Valable en cas d'utilisation du GC CachePHP DB
  29. 29. STRIP_TAGS() <?php $string = '<a><b><c>'; echo strip_tags($string, '<a><b>'); echo strip_tags($string, ['<a>', '<b>']); ?>
  30. 30. PROC_OPEN() <?php proc_open(['php', '-r',  'echo "Hello Worldn";'],  $descriptors, $pipes); shell_exec("php -r " . escapeshellargs('echo "Hello Worldn";')); ?>
  31. 31. PREG_UNMATCHED_AS_NULL <?php preg_match('/(a)(b)?/', 'abc', $r); /* Array (     [0] => ab     [1] => a     [2] => b ) */
  32. 32. PREG_UNMATCHED_AS_NULL <?php preg_match('/(a)(b)?/', 'amc', $r); /* Array (     [0] => a     [1] => a ) */
  33. 33. PREG_UNMATCHED_AS_NULL <?php preg_match('/(a)(b)?/', 'amc', $r, PREG_UNMATCHED_AS_NULL); /* Array (     [0] => a     [1] => a     [2] => NULL ) */
  34. 34. SERIALISATION NOUVELLE • __sleep()/__wake() • Serializable interface • __serialize() / __unserialize() • Gère les classes parent • Plus simple à déserialiser
  35. 35. SERIALISATION NOUVELLE class B extends A {     private $prop_b;     public function __serialize(): array {         return [             "prop_b" => $this->prop_b,             "parent_data" => parent::__serialize(),         ];     }     public function __unserialize(array $data) {         parent::__unserialize($data["parent_data"]);         $this->prop_b = $data["prop_b"];     } }
  36. 36. DIVERS
  37. 37. PRELOADING app.php framework.php Autoload Output app.phpwork.php Output
  38. 38. <?php // create FFI object, loading libc and
 // exporting function printf() $ffi = FFI::cdef(     "int printf(const char *format, ...);", 
 // this is a regular C declaration     "libc.so.6"); // call C's printf() $ffi->printf("Hello %s!n", "world"); ?> FOREIGN FUNCTION INTERFACE • ffi.enable = false
  39. 39. • ext/wddx se retire • ext/hash s'impose • PEAR est définitivement mort • money_format() se retire • Les classes sans parent ne compile plus parent::
  40. 40. MOINS D'ERREURS 0 125 250 375 500 PHP 5.0 PHP 5.1 PHP 5.2 PHP 5.3 PHP 5.4 PHP 5.5 PHP 5.6 PHP 7.0 PHP 7.1 PHP 7.2 PHP 7.3 PHP 7.4 PHP 8.0 Message d’erreur distinct
  41. 41. PERFORMANCES • Gain de performances • 1 à 5 % par rapport à PHP 7.3 • Potentiel de gain avec ext/FFI • Potentiel de pertes avec les propriétés typées • Ne pas les utiliser est plus lent!!
  42. 42. AIDE À LA MIGRATION • Exakat • Rapports 7.x • Suggestions • PHPCompatibility • PHP CS
  43. 43. BON PHP 7.4! @exakat

Déjà, PHP 7.4 toque à la porte, et il arrive les bras chargés de fonctionnalités et de modernisations. Que ce soit les FFI, le support du typage pour les propriétés, l’abandon des nombres real, la covariance, et même la modernisation de strip_tags, array_merge sans argument, et l’imbrication d’opérateurs ternaires : ouf, il va falloir se retrousser les manches. Durant la session, nous passerons en revue les nouvelles fonctionnalités, les incompatibilités, et nous verrons comment préparer son code dès maintenant.

Views

Total views

685

On Slideshare

0

From embeds

0

Number of embeds

19

Actions

Downloads

5

Shares

0

Comments

0

Likes

0

×