SlideShare une entreprise Scribd logo
1  sur  19
La grande épopée de l’univers PHP
Romain Cambien
@r_cambien
Directeur technique chez Webrivage
Co-organisateur de l’AFUP Aix-Marseille
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
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 ?😜
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 ! 🥳
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
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
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
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
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 ! 🎉
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)
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
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
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
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 !
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 !
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
Questions ? 💬
PHP5: Endgame

Contenu connexe

Tendances

Ligne de commandes sous Linux : effrayant ? Non : indispensable !
Ligne de commandes sous Linux : effrayant ? Non : indispensable !Ligne de commandes sous Linux : effrayant ? Non : indispensable !
Ligne de commandes sous Linux : effrayant ? Non : indispensable !Pascal MARTIN
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en gokader15
 
PHP 5.3 : les nouveautés du futur si proche
PHP 5.3 : les nouveautés du futur si prochePHP 5.3 : les nouveautés du futur si proche
PHP 5.3 : les nouveautés du futur si prochePascal MARTIN
 
Introduction TypeScript
Introduction TypeScriptIntroduction TypeScript
Introduction TypeScriptfelixbillon
 
Java scripting api
Java scripting apiJava scripting api
Java scripting apiFranck SIMON
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7neuros
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHPjulien pauli
 
PHP : retour vers le futur !
PHP : retour vers le futur !PHP : retour vers le futur !
PHP : retour vers le futur !Frederic Hardy
 
PHPTour 2011 - PHP5.4
PHPTour 2011 - PHP5.4PHPTour 2011 - PHP5.4
PHPTour 2011 - PHP5.4julien pauli
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afupJulien Vinber
 
Présentation de PHP 5.4 [FR]
Présentation de PHP 5.4 [FR]Présentation de PHP 5.4 [FR]
Présentation de PHP 5.4 [FR]Wixiweb
 
Android Input Method Editor
Android   Input Method EditorAndroid   Input Method Editor
Android Input Method EditorFranck SIMON
 
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEMarouan OMEZZINE
 
Quid de vos applications symfony 1
Quid de vos applications symfony 1Quid de vos applications symfony 1
Quid de vos applications symfony 1marchugon
 
Php forum 2017 - Maisons du Monde
Php forum 2017 - Maisons du MondePhp forum 2017 - Maisons du Monde
Php forum 2017 - Maisons du Mondemarchugon
 
A la recherche du code mort
A la recherche du code mortA la recherche du code mort
A la recherche du code mortDamien Seguy
 

Tendances (20)

Ligne de commandes sous Linux : effrayant ? Non : indispensable !
Ligne de commandes sous Linux : effrayant ? Non : indispensable !Ligne de commandes sous Linux : effrayant ? Non : indispensable !
Ligne de commandes sous Linux : effrayant ? Non : indispensable !
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en go
 
PHP 5.3 : les nouveautés du futur si proche
PHP 5.3 : les nouveautés du futur si prochePHP 5.3 : les nouveautés du futur si proche
PHP 5.3 : les nouveautés du futur si proche
 
Introduction TypeScript
Introduction TypeScriptIntroduction TypeScript
Introduction TypeScript
 
Java scripting api
Java scripting apiJava scripting api
Java scripting api
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
PHP : retour vers le futur !
PHP : retour vers le futur !PHP : retour vers le futur !
PHP : retour vers le futur !
 
Outils de gestion de projets
Outils de gestion de projetsOutils de gestion de projets
Outils de gestion de projets
 
PHPTour 2011 - PHP5.4
PHPTour 2011 - PHP5.4PHPTour 2011 - PHP5.4
PHPTour 2011 - PHP5.4
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afup
 
Plein phar !
Plein phar !Plein phar !
Plein phar !
 
Initiation au langage PHP
Initiation au langage PHPInitiation au langage PHP
Initiation au langage PHP
 
Présentation de PHP 5.4 [FR]
Présentation de PHP 5.4 [FR]Présentation de PHP 5.4 [FR]
Présentation de PHP 5.4 [FR]
 
Android Input Method Editor
Android   Input Method EditorAndroid   Input Method Editor
Android Input Method Editor
 
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
 
Android NDK
Android   NDKAndroid   NDK
Android NDK
 
Quid de vos applications symfony 1
Quid de vos applications symfony 1Quid de vos applications symfony 1
Quid de vos applications symfony 1
 
Php forum 2017 - Maisons du Monde
Php forum 2017 - Maisons du MondePhp forum 2017 - Maisons du Monde
Php forum 2017 - Maisons du Monde
 
A la recherche du code mort
A la recherche du code mortA la recherche du code mort
A la recherche du code mort
 

Similaire à PHP5: Endgame

Lbv Dev Meetup #1
Lbv Dev Meetup #1Lbv Dev Meetup #1
Lbv Dev Meetup #1LbvDev
 
Cours php -partie 1.pdf
Cours php -partie 1.pdfCours php -partie 1.pdf
Cours php -partie 1.pdfssuserc46a93
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3Eddy RICHARD
 
l'Industrialisation (avec PHP) @MMIConnect
l'Industrialisation (avec PHP) @MMIConnectl'Industrialisation (avec PHP) @MMIConnect
l'Industrialisation (avec PHP) @MMIConnectFlorent DENIS
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
PHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_ExtensionsPHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_Extensionsjulien pauli
 
Big Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBig Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBruno Bonnin
 
hassclic270.ppt
hassclic270.ppthassclic270.ppt
hassclic270.pptadiouf2
 
Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances Firas Kouẞàa
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP NextSQLI
 
PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...Romain Cambien
 
Retour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesRetour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesVincent Composieux
 

Similaire à PHP5: Endgame (20)

Nouveautés php 7
Nouveautés php 7Nouveautés php 7
Nouveautés php 7
 
Php seance1
Php seance1Php seance1
Php seance1
 
Lbv Dev Meetup #1
Lbv Dev Meetup #1Lbv Dev Meetup #1
Lbv Dev Meetup #1
 
Xhprof
XhprofXhprof
Xhprof
 
Cours php -partie 1.pdf
Cours php -partie 1.pdfCours php -partie 1.pdf
Cours php -partie 1.pdf
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
 
Installation open erp
Installation open erpInstallation open erp
Installation open erp
 
Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015
 
l'Industrialisation (avec PHP) @MMIConnect
l'Industrialisation (avec PHP) @MMIConnectl'Industrialisation (avec PHP) @MMIConnect
l'Industrialisation (avec PHP) @MMIConnect
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
43_pps.pdf
43_pps.pdf43_pps.pdf
43_pps.pdf
 
PHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_ExtensionsPHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_Extensions
 
Big Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBig Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache Zeppelin
 
hassclic270.ppt
hassclic270.ppthassclic270.ppt
hassclic270.ppt
 
Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP Next
 
PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...PHP Composer : Pourquoi ? Comment ? Et plus ...
PHP Composer : Pourquoi ? Comment ? Et plus ...
 
Retour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, KubernetesRetour d'expérience technique Go, gRPC, Kubernetes
Retour d'expérience technique Go, gRPC, Kubernetes
 
Le portage des WebExtensions
Le portage des WebExtensionsLe portage des WebExtensions
Le portage des WebExtensions
 

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

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