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 ?
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