Le lab des experts Nouveautés et mises à jour

PHP 8.1 maintenant disponible : quelles sont les nouveautés de cette mise à jour ?

PHP 8.2 disponible

Une nouvelle version du langage PHP, PHP 8.1, est sortie le 25 novembre 2021. Dans son annonce, php.net a affirmé proposer « de meilleures performances, une meilleure syntaxe et une sécurité de type améliorée » (lien en anglais).

Voici un résumé de ce qui nous semble utile à noter dans cette version.

Amélioration des performances

Grâce à diverses optimisations du code de PHP, la vitesse de rendu des pages a été améliorée. PHP annonce des améliorations d’environ 23 % sur le rendu des pages en utilisant Symphony Demo App et de 3,5 % pour WordPress (bien que sa dernière version ne supporte pas encore PHP 8.1).

Notez que ces améliorations ne dépendent pas de l’utilisation du compilateur JIT (just-in-time compiler), vous les obtiendrez donc dès que vous utiliserez PHP 8.1.

Changements pour les développeurs

Enumérations

Les énumérations (ou types énumérés) servent dès que l’on souhaite un type qui fournit un nombre fixe et limité d’options nommées de manière pratique. Voici un petit exemple pour mieux les comprendre :

enum Language {
      case JavaScript;
      case PHP;
case Python;
}
$current_language = Language::PHP;


Notez que ceci peut être utilisé avec les expressions « match«  qui ont été introduites en PHP 8.0 :

echo match ($current_language) {
    Language::PHP => "Hello World!",
    default => "",
};
// Hello World!

Nouvelle syntaxe de pointeur sur une fonction

Contrairement à d’autres langages où les fonctions sont des objets standards, en PHP, vous ne pouvez pas simplement utiliser une référence de fonction pour la stocker dans une variable (« $var = strlen;«  n’est pas valide). Vous pouvez maintenant utiliser « nom_fonction(…)«  (où les points font partie de la syntaxe) pour obtenir une fonction anonyme comme dans :

$rev = strrev(...);
echo $rev("PHP");
// PHP
echo strrev(...)("idnaG");
// Gandi

Cela permet d’éviter d’utiliser par exemple « Closure::fromCallable«  et d’y substituer une solution plus courte et plus claire.

Fusion par dépaquetage (unpacking) de tableaux indexés par des chaînes de caractères


En PHP, les tableaux peuvent être utilisés pour ce que d’autres langages appellent des listes (une collection ordonnée de valeurs) ou pour des dictionnaires ou des tables de hachage (une collection d’éléments composés d’une clé associée à unevaleur). PHP supporte déjà la fusion de tableaux indexés numériquement comme dans :

$array1 = [1, 2];
$array2 = [3];
$merged = [0, ...$array1, ...$array2];
// [0 => 0, 1 => 1, 2 => 2, 3 => 3]


Désormais, la fusion de tableaux est aussi possible pour ceux dont les clés sont des chaînes de caractères :

$merged = [0, "a" => "A", ...[1, "a" => "a"]];
// [0 => 0, "a" => "a", 1 => 1]

Propriétés en lecture seule

Les propriétés en lecture seule (mot-clé « readonly« ) permettent de garantir que des propriétés d’un objet ne peuvent être définies que lors de la création de l’objet (dans la méthode du constructeur de l’objet) et qu’elles ne peuvent plus être modifiées par la suite. Elles diffèrent des constantes (mot-clé « const« ) qui sont définies directement lors de la définition de la classe.

Constantes de classe finales


Les constantes de classe peuvent maintenant être rendues finales (en utilisant le mot-clé « final« ) pour empêcher lesclasses qui héritent de la classe qui les définit de changer la valeur de la constante. « final«  n’est pas un nouveau mot-clé car il était déjà utilisable pour les méthodes et les méthodes de classe.

Autres changements notables


D’autres changements ont été introduits :

  • une nouvelle notation pour les nombres octaux : le préfixe « 0o«  peut être utilisé (« 0o10«  et « 010«  valent 8, et « 0o1_000« , 512),
  • le type de retour « never«  pour indiquer qu’une fonction ne doit jamais revenir (et plutôt terminer le programme ou lancerune exception),
  • le mot-clé « new«  peut être utilisé comme paramètre par défaut et plus généralement dans le contexte des initialisateurs,
  • les types d’intersection (définis avec « &« ) qui peut être utilisé pour forcer un paramètre à satisfaire simultanément les contraintes de plusieurs types,
  • la notion de « fiber«  pour simplifier l’écriture de code concurrent lorsqu’il est exécuté dans une boucle d’événement.

Pour plus d’informations sur la façon de migrer du code vers PHP 8.1, vous pouvez vous référer à la documentation officielle de php.net.

Et pour héberger réellement du code avec un interpréteur PHP 8.1, vous pouvez utiliser notre offre d’hébergement Gandi.