PHP 8 débarque avec le nouveau compilateur JIT

Mathieu Chartier Développement 0 commentaire

Près de 5 ans après la dernière version majeure (PHP 7.0), les équipes à la source de PHP viennent de publier PHP 8.0.0, toute première mouture de la série 8 du langage de développement web. Doté d'un nouveau compilateur JIT encore plus rapide et de nouvelles fonctionnalités, les développeurs devraient rapidement se familiariser avec cette nouvelle édition de PHP.

Logo de PHP 8

Le compilateur JIT de PHP 8

PHP 8 propose moults nouveautés mais c'est essentiellement son nouveau compilateur JIT (just in time) qui rend l'exécution des programmes encore plus rapide. Dans les faits, ce sont même deux nouveaux compilateurs qui débarquent puisque PHP 8 (function JIT et tracing JIT) pour accélérer le langage. En effet, JIT pourrait se traduire par "à la volée", ce qui permet à PHP de compiler des morceaux de code au fur et à mesure de l'exécution, et donc de gagner nettement en performance. Pour le moment, les gains sont encore faibles sur des frameworks comme Symfony ou des CMS comme WordPress, mais bien plus importants sur des fonctionnalités prévues à cet effet. Il faudra donc peut-être encore un peu de temps pour que le compilateur profite à tous (avec un code adapté, ça devrait aider... ^^) mais les gains sont nets quand tout est conçu pour PHP 8. Pour résumer, le compilateur Tracing JIT intervient comme le ferait OPcache, avec un système de gestion de mémoire qui lui permet d'exécuter des morceaux de programmes plus rapidement.

PHP 8 et son nouveau compilateur JITDe nouvelles fonctionnalités pour PHP 8

La nouvelle version de PHP n'est pas publiée pour rien, et de nombreuses modifications ont été apportées pour compléter le langage de programmation déjà bien riche en possibilités. Parmi elles, sachez que PHP 8 améliore la gestion des erreurs (dites au revoir à la suppression des erreurs fatales lorsque l'on ajoute un @ avant la fonction) ou encore le typage des données (réellement introduit dans PHP 7 avec enfin un peu de rigueur... ^^). On note l'usage notamment l'apparition du type mixed (utile si un paramètre peut-être de plusieurs types) ou encore le type de retour static qui n'existait pas. De même, certains messages d'erreurs ont été corrigés pour être plus clairs pour les développeurs, comme dans cet exemple :

PHP 8 est plus précis dans la description des erreurs de typage

Je ne ferai pas le tour de l'ensemble des nouveautés mais nous pouvons en noter certaines très intéressantes :

  • Introduction des arguments nommés : il s'agit de paramètres de fonction qui ne nécessitent plus de suivre l'ordre préétablis puisqu'ils sont "nommés". Dans les faits, cela permet de n'utiliser que les arguments utiles sans avoir à fournir de valeurs pour des paramètres intermédiaires parfois inutiles ou avec des valeurs par défaut déjà idéales. Python utilise les arguments nommés depuis des années et j'aimais bien ce principe, c'est plutôt cool de le retrouver dans PHP 8.
array_fill(0, 100, 50); // Version classique

array_fill(start_index: 0, num: 100, value: 50); // Avec arguments nommés

// Exemple d'utilisation
array_fill(value: 50, num: 100, start_index: 0);
  • Expression match() : cette nouvelle expression peut être assimilée à l'opérateur switch, si ce n'est qu'elle effectue une comparaison directe, qu'elle retourne une valeur directement et surtout qu'elle ne nécessite pas d'utiliser break; à outrance. Dans la capture suivante, on observe une comparaison de type de données avec les deux procédés, il est assez net que l'expression match() devrait rapidement remporter les suffrages auprès des développeurs...

Expression match dans PHP 8

  • Opérateur Nullsafe : l'opérateur "?" placé après une variable permet de vérifier le type "null" en évitant de mettre en oeuvre une condition avec if(). C'est un gain de temps et d'efficacité dans l'écriture des programmes.

Opérateur nullsafe pour PHP 8

  • Fonction str_contains() : c'est une fonction qui risque d'être utilisée très fréquemment puisqu'elle viendra remplacer les méthodes parfois alambiquées des développeurs pour vérifier la présence d'une chaîne de caractère dans une autre chaîne. S'il est toujours possible de procéder avec strpos(), la fonction str_contains() va nettement simplifier les recherches de ce type...
$chaine = 'Ce blog est réalisé avec WordPress';
$chaineATrouver = 'WordPress';

if (str_contains($chaine, $chaineATrouver)) {
	echo "WordPress est présent dans la chaîne";
}
  • Fonctions str_starts_with() et str_ends_with() : dans le même esprit que str_contains(), ces deux nouvelles fonctions permettent de vérifier si une chaîne commence ou termine par une chaîne donnée.
  • Réduction du code pour la déclaration des propriétés de classe PHP : il n'est plus nécessaire de déclarer les propriétés, de les récupérer via les arguments du constructeur puis de transmettre les valeurs. Tout peut se faire directement dans le constructeur, comme dans la capture suivante.

PHP 8 permet de déclarer rapidement les propriétés de classe (POO)

Parmi les petites fonctionnalités, on peut aussi compter sur l'ajout d'une virgule de fin dans les paramètres de fonctions/méthodes (déjà introduites en PHP 7.2 dans les listes, etc.), dont l'objectif est d'éviter certaines erreurs de syntaxe quand on empile des arguments. PHP 8 améliore aussi la gestion des annotations en évitant de passer par PHPDoc comme avant, ce qui permet de raccourcir les méthodes de documentation. On peut aussi créer des héritages avec les méthodes privées, et donc compléter la liste des possibilités en PHP orienté objet. Dans tous les cas, ce PHP 8 apporte encore de bonnes nouveautés intéressantes, et surtout plus de performance qu'une version 7 déjà intéressante...