PHP, le langage Web côté serveur utilisé par 8 sites web sur 10 utilisant du code côté serveur, a un cycle de publication annuel et la dernière mise à jour de ce vénérable cheval de bataille du Web vient d’être publiée.
La version de l’année dernière, soit PHP 8.0, était une version majeure, ajoutant des métadonnées aux déclarations de classes. Bien qu’il ne s’agisse que d’une mise à jour à la virgule près, PHP 8.1 comporte de nombreuses nouvelles fonctionnalités, ce qui est un exploit remarquable pour un langage open source qui, jusqu’à la formation de la PHP Fondation la semaine dernière, était relativement peu supporté.
En tête de liste des nouvelles fonctionnalités, on trouve les énumérations (Enums
) qui permettent à un développeur de définir un type personnalisé limité à un nombre discret de valeurs possibles. L’exemple le plus populaire d’énumérations est le type booléen intégré, qui est un type énuméré avec les valeurs true
et false
. Les énumérations permettent aux développeurs de définir leurs propres énumérations arbitrairement robustes.
Selon les notes de version :
Les
Enums
apparaissent dans de nombreux langages avec une variété de fonctionnalités différentes. En PHP, lesEnums
sont un type d’objet particulier. L’Enum
elle-même est une classe, et ses cas possibles sont tous des objets de cette classe. Cela signifie que les cas d’Enum
sont des objets valides et peuvent être utilisés partout où un objet peut être utilisé, y compris dans les contrôles de type.
Le prochain sur la liste est le modificateur de propriété readonly
, qui empêche la modification de la propriété après l’initialisation. Cela signifie qu’ils constituent un bon moyen de modéliser les objets de valeur et les objets de transfert de données.
Fiber, vers l’asynchrone ?
La troisième nouvelle fonctionnalité, Fibers, répond au problème que le code PHP était jusqu’à récemment synchrone, ce qui peut être lent. L’introduction de Fibers vise à éliminer la distinction entre les fonctions synchrones et asynchrones en permettant aux fonctions d’être interruptibles sans polluer toute la pile d’appel.
Selon les notes de version :
Les Fibers sont des primitives permettant d’implémenter une concurrence coopérative légère. Elles sont un moyen de créer des blocs de code qui peuvent être interrompus et repris comme les générateurs, mais de n’importe où dans la pile. Les Fibers elles-mêmes ne fournissent pas magiquement de la concurrence, il faut toujours une boucle d’événement. Cependant, elles permettent aux implémentations bloquantes et non bloquantes de partager la même API.
Les Fibers permettent de se débarrasser du code passe-partout que l’on voyait auparavant avec
Promise::then()
ou les co-routines basées sur les générateurs. Les bibliothèques construisent généralement d’autres abstractions autour des Fibers, il n’y a donc pas besoin d’interagir directement avec elles.
PHP 8.1 apporte également une syntaxe d’appel de première classe, des types d’intersection, et le type de retour never
pour les fonctions qui ne retournent rien mais qui doivent soit sortir / lancer une exception / ne pas se terminer. De plus, cette version introduit le modificateur final
pour les constantes de classe, les nouvelles fonctions fsync
et fdatasync
, la nouvelle fonction array_is_list()
, et la notation explicite des chiffres octaux.
Une accélération de 23% pour la démo Symfony avec PHP 8.1
Il y a plusieurs améliorations liées aux performances :
- Backend JIT pour ARM64 (AArch64)
- Cache d’héritage (évite de relier les classes à chaque requête)
- Résolution rapide des noms de classes (évite les minuscules et la recherche par hachage)
- Amélioration des performances de
timelib
etext
/date
- Amélioration des itérateurs du système de fichiers SPL
- Optimisations de
serialize()
/unserialize()
- Optimisation de certaines fonctions internes (
get_declared_classes()
,explode()
,strtr()
,strnatcmp()
,dechex()
) - Améliorations et corrections JIT
En conséquence, les notes de publication font état d’une accélération de 23% pour la démo Symfony utilisée comme référence par rapport à PHP 8.0 et de 3,5% pour WordPress.
PHP 8.1 est maintenant disponible en téléchargement.