Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

PHP5: Endgame

120 vues

Publié le

C'est maintenant la fin pour PHP5 ! Mais connaissez vous vraiment tous ce qu'a apporté cette version ? Et maintenant, quoi de neuf en PHP7 ... et après, vers PHP8 ?

Publié dans : Technologie
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

PHP5: Endgame

  1. 1. La grande épopée de l’univers PHP
  2. 2. Romain Cambien @r_cambien Directeur technique chez Webrivage Co-organisateur de l’AFUP Aix-Marseille
  3. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 18. Questions ? 💬

×