Publicité
Publicité

Contenu connexe

Publicité

PHP5: Endgame

  1. La grande épopée de l’univers PHP
  2. Romain Cambien @r_cambien Directeur technique chez Webrivage Co-organisateur de l’AFUP Aix-Marseille
  3. Plantons le décor ● PHP, c’est 79,1% des langages coté serveur ● Mais encore 67,7% en PHP5 😔 ● 0,6% de PHP4 et <0,1% de PHP3 😱 ● Ce qui nous donne 31,8% de PHP7 ○ 34,3% de 7.0 ○ 27,2% de 7.1 ○ 33,8% de 7.2 ○ 4,6% de 7.3 … sortie le 6 décembre 2018 ○ <0,1% de 7.4 (les devs PHPs 😎) https://w3techs.com/technologies/details/pl-php/all/all
  4. Etes-vous de vrais fan de PHP ? ● Les espaces de nom ? ○ PHP 5.3 depuis le 30 juin 2009 ● Les Traits ? ○ PHP 5.4 depuis le 1er mars 2012 ● La syntaxe courte pour les tableaux “$a = [0, 1]” ? ○ PHP 5.4 ● Les générateurs et “yield” ? ○ PHP 5.5 depuis le 20 juin 2013 ● L’opérateur de décomposition “func(…$b)” ? ○ PHP 5.6 depuis le 28 août 2014 Connaissez-vous bien PHP5 ?😜
  5. Retour dans le passé ! ● PHP5 sort le 13 juillet 2004 ○ Nouveau moteur (Zend Engine 2) mais peu de nouvelles fonctionnalités ● La 5.1 sort le 24 novembre 2005 ○ Intégration par défaut de PDO ● La 5.2 sort le 2 novembre 2006 ○ Ajout de la classe DateTime ● La 5.3 sort le 30 juin 2009 … 2 ans et demi plus tard ! 😒 ○ Beaucoup de nouvelles fonctionnalités dont: ■ Les espaces de nom ! 🎉 ■ Les fermetures ! 🥳
  6. Retour dans le passé avec PHP … 5.4 ● Sortie le 1 mars 2012 … peu après Avengers 😎 ● Ajout des Traits: <?php trait LoggerTrait { function log($messasge) { echo "$messagen"; } } class A { use LoggerTrait; /***/ } class B { use LoggerTrait; /***/ } Parfait pour du code utilitaire (Slugify, Logger, Debuger, …) ● Syntaxe courte pour les tableaux: $a = ['a' => 'b']; https://www.php.net/manual/fr/migration54.new-features.php
  7. Retour dans le passé avec PHP … 5.5 ● Sortie le 30 juin 2013 … la même année qu’Iron Man 3 ● Les générateurs: <?php function getFibonacci() { $i = 0; $k = 1; yield $k; while(true) { $k = $i + $k; $i = $k - $i; yield $k; } } foreach (getFibonacci() as $nextValue) { echo $nextValue; } // 0, 1, 1, 2, 3, 5, 8, 13, 21, ... Un outil puissant pour la gestion de flux et le co-routing (icicle, AMP). ● Mais aussi l’arrivé d’opcache et la syntaxe: ClassName::class; https://www.php.net/manual/fr/migration55.new-features.php
  8. Retour dans le passé avec… 5.6 ● Sortie le 28 août 2014 … en même temps que les Gardiens de la Galaxie ! ● L'opérateur de décomposition permet de passer des arguments à une fonction directement depuis un tableau: function add($a, $b, $c) { return $a + $b + $c; } $operators = [2, 3]; echo add(1, ...$operators); // 6 ● Et les fonctions à arguments variables: function total_intervals($unit, DateInterval ...$intervals) { $time = 0; foreach ($intervals as $interval) { $time += $interval->$unit; } return $time; } echo total_intervals('d', new DateInterval('P1D'), new DateInterval('P2D')); // 3 https://www.php.net/manual/fr/migration56.new-features.php
  9. PHP5 : La fin ? ● La 5.6 est la dernière version de la phase 5 ● Fin du support de la version 5.6 le 31 décembre 2018 … ● PHP 5.6.40 sortie le 10 janvier 2019 ! 😠 (https://github.com/docker-library/php/issues/774) ● Et les frameworks ? ○ Laravel, minimum PHP7 depuis la 5.5, plus de support PHP5 ○ Symfony, minimum PHP7 depuis la 4.0, PHP5 encore supporté via la LTS 3.4 jusqu’en Novembre 2020 ○ Zend Framework, toujours compatible PHP 5.6+ 😐 ■ Mais compatible PHP7 depuis la version 3
  10. La mort du héro: PHP6 ● Version 6 développée depuis 2005 ! ● But principal: l’utilisation native de UTF-16 ● Mais trop complexe à mettre en place ● Suite à la lenteur du développement, beaucoup de fonctionnalités sont migrées dans PHP 5.3 puis PHP 5.4 … mais sans l’unicode ● En 2014, un vote est lancé sur l’abandon de PHP 6 💀 (https://wiki.php.net/rfc/php6) ● Afin d'éviter les confusions, la prochaine version de PHP sera la 7 ! 🎉
  11. Un nouveau challenger ? HHVM ! ● Malgrés des améliorations de performances pour chaque version de PHP5, le langage reste lent. ● Facebook, gros utilisateur de PHP, décide de lancer en 2010 un transcodeur PHP vers C++ : HipHop ● Début 2013, ils lancent HHVM (HipHop Virtual Machine), un compilateur JIT pour PHP reposant sur leur projet HipHop ● L'engouement de la communauté est important, les performances sont doublée ! 🏃 ● Zend lance alors une refonte du moteur PHP : PHPNG ● Début 2014, PHPNG est mergé dans PHP, c’est le début de PHP7 ! (https://wiki.php.net/rfc/phpng)
  12. Le retour du héro: PHP 7.0 ● La nouvelle version sort le 3 décembre 2015 La même année qu’Avengers 2 ! ● Les performances sont doublées par rapport à PHP 5.6 😲 ● Beaucoup de nouveautés: https://www.php.net/manual/fr/migration70.new-features.php declare(strict_types=1); $app->setLogger(new class implements Logger { public function log(string $message, array $context): bool { $level = $context['level'] ?? 'INFO'; echo "$level : $messagen"; return true; } }); $array = [['name' => 'AFUP'], ['name' => 'AFSY']]; usort($array, function ($a, $b) { return $a['name'] <=> $b['name']; }); Classe anonyme Déclarations du type scalaire Déclarations du type de retour Opérateur Null coalescent Opérateur Spaceship Mode de validation stricte des types
  13. On améliore son nouvel équipement: PHP 7.1 ● Presque un an plus tard, le 1 décembre 2016, sort la version 7.1 ● Son but est surtout de compléter les nouvelles fonctionnalités ● Ajout du type nullable: function test(?string $name): ?array ● Ajout du type de retour void pour les fonctions ne retournant rien ● Ajout des visibilités sur les constantes: protected const PROTECTED_CONST = 0; ● Récupération d'exception multiple: catch (ExceptionType1 | ExceptionType2 $e) ● Amélioration de la fonction list: <?php $data = [ ["id" => 1, "name" => 'Tom'], ["id" => 2, "name" => 'Fred'], ]; foreach ($data as ["id" => $id, "name" => $name]) { echo "id: $id, name: $namen"; } Syntaxe alternative pour list
  14. Toujours plus fort: PHP 7.2 et 7.3 ● PHP 7.2 sort le 30 novembre 2017 ○ Amélioration des performances ○ Intégration dans le noyau de la SODIUM en remplacement du défunt Mcrypt ● PHP 7.3 sort le 6 décembre 2018 ○ Amélioration des performances … encore 🚀 ○ Migration du moteur d’expression régulière en PCRE2 ○ Ajout d’une option pour que JSON lève des exceptions (JSON_THROW_ON_ERROR) https://www.php.net/manual/fr/migration72.new-features.php https://www.php.net/manual/fr/migration73.new-features.php
  15. Mettez vous à jour ! ● PHP7 est disponible dans toutes les plus grosses distributions Linux: ○ Ubuntu depuis la version 16.04 ○ Debian depuis la version 9 ○ openSUSE depuis Leap 42.3 ○ Fedora depuis la version 25 ○ Et les dépôts alternatifs : ■ RPM : https://blog.remirepo.net/ ■ DEB Ubuntu : https://launchpad.net/~ondrej/+archive/ubuntu/php ■ DEB Debian : https://www.dotdeb.org/ https://deb.sury.org/ ○ Et bien sûr, les images Docker officielles : https://hub.docker.com/_/php ● Tous les plus gros framework sont compatible PHP7 ● Testez la compatibilité de votre code avec PHPCompatibility !
  16. Le prochain super héro ? Découvrons PHP 7.4 ● Sortie prévu le 21 novembre 2019 ● Système de pré-chargement de code PHP. Gain de performance lors de l’utilisation de framework ● Fermeture courte: $ids = array_map(fn($post) => $post->id, $posts); ● Typage des propriétés (adieu PHPDoc 😜) ● Opérateur de décomposition utilisable dans les tableaux: $arr1 = [1, 2, 3]; $arr2 = [0, ...$arr1]; // [0, 1, 2, 3] ● L’opérateur Null coalescent avec assignment: $data['date'] ??= new DateTime(); ● Dernière version de la phase 7 !
  17. Un nouvelle aventure commence: PHP8 ● Développement commencé le 28 janvier 2019 ● Prévu pour fin 2020 ou début 2021 ● Encore en discussion active sur les nouvelles fonctionnalités ● Mais intégration confirmé d’un compilateur JIT (Just In Time) ○ Encore difficile de connaître le gain de performance ○ Mais les premiers tests sont prometteurs: ■ https://stitcher.io/blog/php-jit ■ https://beberlei.de/2019/03/23/playing_with_the_php_jit.html
  18. Questions ? 💬

Notes de l'éditeur

  1. Montrer qu’aujourd’hui, on fait encore beaucoup de PHP5 et qu’une infime partie des sites utilisent les dernière version du langage
  2. Montrer que toutes les fonctionnalités moderne sont en fait très vielles
Publicité