PHP 8.2 : À quoi s’attendre (Guide du développeur – Mis à jour)

Publié : par Jason Cosper
PHP 8.2 : À quoi s’attendre (Guide du développeur – Mis à jour) thumbnail

PHP 8.2 est prévu pour sortir en novembre de cette année, la version stable la plus récente étant PHP 8.1.5. Bien qu’il soit encore tôt dans le processus, il y a eu un accueil mitigé autour de PHP 8.2 et la compatibilité du noyau WordPress, des plugins et des thèmes.

Cependant, savoir à quoi s’attendre peut t’aider à te préparer pour la dernière version de PHP. En te renseignant sur les nouvelles fonctionnalités et celles qui sont dépréciées, tu peux comprendre comment la mise à jour pourrait affecter le développement. Cette connaissance peut également t’aider à te préparer pour la sortie éventuelle.

Dans ce post, nous allons récapituler les versions les plus récentes de PHP. Ensuite, nous couvrirons les nouveautés de PHP 8.2 et discuterons du calendrier de sortie. Plongeons-y !

Vue D’ensemble Des Versions PHP

PHP est le principal langage de programmation de WordPress. Il joue un rôle essentiel dans la conversion des données de ta base de données en pages web HTML pour les visiteurs de ton site.

En tant que propriétaire ou développeur de site web, tu es probablement déjà conscient de l’importance de maintenir à jour ton noyau WordPress, tes thèmes et tes plugins. Cependant, il est également crucial de garder ton PHP à jour.

Actuellement, WordPress recommande d’utiliser au moins PHP 7.4. Les anciennes versions de PHP ne bénéficient plus de support actif pour les mises à jour de sécurité et la correction de bugs. Par conséquent, la mise à niveau vers la dernière version stable de PHP peut entraîner une meilleure sécurité du site, une performance améliorée et des niveaux de support plus élevés (nous soulignons stable car une partie des 60 000+ plugins de WordPress n’est pas encore totalement compatible avec PHP 8.0, donc il est judicieux d’aborder ces mises à jour avec prudence).

PHP 7.4 a introduit des propriétés typées, un séparateur numérique sous forme de trait bas, et diverses améliorations. Depuis, il y a eu quelques itérations de PHP supplémentaires publiées.

PHP 8.0, sorti en novembre 2020, a introduit plusieurs fonctionnalités essentielles. En plus des améliorations de syntaxe et de performance, la version incluait :

  • Paramètres nommés
  • Syntaxe de correspondance
  • Types d’union
  • Promotion de propriété de constructeur
  • JIT (qui affecte l’exécution du code source par PHP)

Un an plus tard, est arrivé PHP 8.1, la dernière version majeure de PHP. Cette mise à jour inclut des fonctionnalités importantes, telles que :

  • Types d’intersection
  • Propriétés en lecture seule
  • Énumérations
  • Fibres
  • Type de retour jamais

Rester à jour avec les dernières versions de PHP peut aider à améliorer les performances et la sécurité de ton site web. Cependant, il est important de connaître les changements à prévoir avant de faire une mise à niveau. Si tu es intéressé à tester l’état actuel de PHP 8.2, tu peux le faire via GitHub.

Quoi De Neuf Dans PHP 8.2

PHP 8.2 est attendu pour une sortie à la fin de l’année 2022. Voici le calendrier actuel des sorties, avec la Disponibilité Générale (GA) programmée pour le 24 novembre 2022 :

  • 9 juin : Alpha 1
  • 23 juin : Alpha 2
  • 7 juillet : Alpha 3
  • 19 juillet : Gel des fonctionnalités
  • 21 juillet : Bêta 1
  • 4 août : Bêta 2
  • 18 août : Bêta 3
  • 1 septembre : Candidat à la publication 1
  • 15 septembre : Candidat à la publication 2
  • 29 septembre : Candidat à la publication 3
  • 13 octobre : Candidat à la publication 4
  • 27 octobre : Candidat à la publication 5
  • 10 novembre : Candidat à la publication 6
  • 24 novembre : GA

Selon la documentation officielle sur le site web de PHP, il devrait y avoir quelques nouvelles fonctionnalités et fonctions obsolètes. Jetons un œil à certaines d’entre elles !

Types de Forme Normale Disjonctive (DNF)

PHP 8.2 va introduire une nouvelle fonctionnalité de types en Forme Normale Disjonctive (DNF). La DNF est une manière standardisée d’organiser des expressions booléennes — spécifiquement, en une série de ANDs combinés par des ORs. Lorsque la DNF est appliquée aux déclarations de type, elle permet une manière standard d’écrire des types Union et Intersection combinés que l’analyseur peut gérer.

Nouvelle Fonction mysqli_execute_query et Méthode mysqli::execute_query

L’exécution de requêtes MySQLi paramétrées sera plus facile dans PHP 8.2, grâce à la nouvelle fonction mysqli_execute_query($sql, $params) et à la méthode mysqli::execute_query.

Cela réduira davantage la complexité de l’utilisation de requêtes paramétrées, ce qui facilitera alors pour les développeurs de se détourner de mysqli_query() ainsi que de l’échappement dangereux/risqué des valeurs utilisateur.

Récupérer les Propriétés Enum dans les Expressions Constantes

Selon le RFC, « Ce RFC propose de permettre l’utilisation de ->/?-> pour extraire les propriétés des énumérations dans les expressions constantes. La motivation principale pour ce changement est de permettre l’extraction des propriétés de nom et de valeur dans des endroits où les objets énumération ne sont pas autorisés, comme les clés de tableau. »

Nouvelle Extension Aléatoire

PHP 8.2 introduit une nouvelle extension PHP nommée random. Elle organise et consolide les fonctionnalités PHP existantes liées à la génération de nombres aléatoires. Elle introduit également une série de structures de classes PHP et de classes d’exception pour fournir des options granulaires pour les générateurs de nombres aléatoires et la gestion des exceptions.

L’extension aléatoire est intégrée à PHP, et il n’y a pas d’option de configuration au moment de la compilation ou de l’exécution pour désactiver l’extension random. L’extension random sera toujours disponible dans PHP 8.2 et les versions ultérieures.

Nouvelle Fonction Curl_Upkeep

PHP 8.2 ajoute une nouvelle fonction à l’extension Curl appelée curl_upkeep. La fonction curl_upkeep appelle curl_easy_upkeep() dans libcurl, qui est la bibliothèque C sous-jacente que l’extension PHP Curl utilise.

La fonction curl_upkeep() réalise le travail qui maintient une connexion Curl active. Cependant, tous les types de connexion que Curl intègre ne prennent pas en charge le maintien de la connexion. Actuellement, seules les connexions HTTP/2 le supportent.

Nouvelle fonction ini_parse_quantity

ini_parse_quantity est une nouvelle fonction qui sera ajoutée à PHP dans PHP 8.2. Elle analyse toute taille de données reconnue par les valeurs INI de PHP (comme 56K, 256M ou 1G), puis retourne la taille des données en octets. Elle peut être utile pour analyser les valeurs INI existantes ou fournies dans une application PHP. Cependant, elle ne reconnaît pas les suffixes IEC pour les tailles de données comme MB, MiB ou GB, et elle n’est pas adaptée pour convertir les valeurs de taille de données standard en octets.

Nouvelle fonction memory_reset_peak_usage

PHP 8.2 inclura une nouvelle fonction appelée memory_reset_peak_usage. Elle réinitialisera la consommation maximale de mémoire renvoyée par la fonction memory_get_peak_usage.

Cette fonction sera utile pour les cas qui nécessitent d’invoquer une action plusieurs fois et d’enregistrer l’utilisation maximale de la mémoire de chaque itération. Les développeurs pourront utiliser cette nouvelle fonctionnalité pour réinitialiser l’utilisation maximale de la mémoire à n’importe quel moment pendant la durée de la requête.

Recevez du contenu directement dans votre boîte de réception

Abonnez-vous maintenant pour recevoir toutes les dernières mises à jour directement dans votre boîte de réception.

Classes en Lecture Seule

Introduites dans PHP 8.1, les propriétés en lecture seule seront étendues dans PHP 8.2 pour ajouter du sucre syntaxique afin que toutes les propriétés de classe soient en lecture seule en même temps :

readonly class Post
{
public function __construct(
public string $title,
public Author $author,
public string $body,
public DateTime $publishedAt,
) {}
}

Cela empêchera l’ajout de propriétés dynamiques aux classes.

Types Indépendants Null, True et False

Dans PHP 8.2, le type de retour false sera disponible en tant que type autonome plutôt que strictement un type d’union lorsqu’une erreur se produit, ce qui est déjà possible :

function alwaysFalse(): false
{
return false;
}

La même chose est vraie pour le type null. Par exemple, en tant que type autonome, contrairement à avant, NullPost::getAuthor() ne pourra retourner que null.

PHP 8.2 permet également true comme un type autonome.

Déprécier Les Propriétés Dynamiques

Les propriétés dynamiques seront obsolètes dans PHP 8.2, entraînant une ErrorException d’ici PHP 9.0. Ces propriétés sont définies sur un objet :

class Post
{
public string $title;
}

// …

$post->name = 'Nom';

Les propriétés dynamiques offrent de la flexibilité lors de la création de classes (par exemple, des objets de valeur) sans une déclaration de classe stricte. Leur dépréciation sera probablement un problème pour les développeurs qui comptent sur les propriétés dynamiques car cela les poussera davantage vers l’analyse statique. Pour cette raison, certains développeurs sont inquiets face à ce changement avec PHP 8.2.

Toutefois, les classes utilisant __get et __set supporteront toujours les propriétés dynamiques, tout comme les objets de stdClass.

Alternativement, les développeurs peuvent utiliser le nouvel attribut #[AllowDynamicProperties], déclaré dans l’espace de noms global, sur les classes pour ces propriétés :

#[AllowDynamicProperties]
class User() {}
$user = new User();
$user->foo = 'bar';

Bien que cela ne soit pas recommandé, une autre option consiste à désactiver les avertissements de dépréciation.

Nouveau /n Modificateur

PHP 8.2 inclura le support pour le modificateur /n (sans capture) pour la famille de fonctions preg_*. Lorsqu’utilisé, tout groupe avec des méta-caractères () ne capturera pas, à part les groupes capturés qui sont nommés. En gros, le résultat est le même que de marquer chaque groupe comme non capturant.

La raison de ce changement est que le modificateur simplifie les expressions régulières complexes pour plusieurs groupes. Plutôt que de marquer chaque groupe comme non capturant, les développeurs peuvent marquer tous les groupes comme non capturants. Ensuite, ils peuvent sélectionner et nommer les groupes spécifiques qui doivent capturer.

Expurger Les Paramètres Dans Les Traces Arrière

De nombreux développeurs utilisent des services qui suivent les traces de pile et les erreurs de production à partir des bases de code. Ces services peuvent informer les utilisateurs si et quand quelque chose ne va pas. Par exemple, le suivi des piles d’appels est utile lors du débogage d’une application.

Cependant, parfois les traces de pile peuvent contenir des informations sensibles, telles que des noms d’utilisateur et des mots de passe. PHP 8.2 inclura un attribut #[SensitiveParameter] qui empêchera ces informations d’être incluses dans les traces de pile lorsque des erreurs se produisent :

function test(
$foo,
#[SensitiveParameter] $bar,
$baz
) {
throw new Exception('Erreur');
}

test('foo', 'bar', 'baz');

PHP 8.2 utilisera les paramètres sensibles pour masquer les informations privées dans les traces de pile, les rendant plus sécurisées. Ces paramètres garantissent que les données ne se retrouveront pas dans les journaux d’erreurs. Notez que cet attribut sera uniquement disponible pour une utilisation sur les paramètres.

Déprécier L’interpolation De Chaîne ${}

Il existe plusieurs manières d’intégrer des variables dans des chaînes avec PHP. Cependant, PHP 8.2 va déprécier deux méthodes. La première consiste à utiliser ${} dans les chaînes :

"Salut ${world}";

La seconde consiste à utiliser ${} (variables variables) :

"Bonjour ${(world)}";

Cela ne sera probablement pas un problème significatif pour les développeurs car les deux méthodes d’interpolation de chaînes les plus populaires fonctionneront toujours.

Déprécier Les Appels Partiellement Supportés

Un autre changement déprécié concernera les appels partiellement supportés. Il existe plusieurs manières de créer un appelable en PHP. Il peut être appelé soit avec soit sans paramètres avec la syntaxe $callable(), la user_call_func(/a_array), ou en utilisant une fonction avec un rappel.

Les motifs appelables obsolètes incluent les suivants :

$callable = "self::method";
$callable = "parent::method";
$callable = "static::method";
$callable = ["self", "method"];
$callable = ["parent", "method"];
$callable = ["static", "method"];
$callable = ["MyClass", "MyParentClass::myMethod"];
$callable = [new MyClass(), "MyOtherClass::myMethod"];

À partir de PHP 8.2, l’appel de l’une des fonctions ci-dessus entraînera l’affichage de l’avis de dépréciation suivant :

class Test {
public static function myMethod(): void {
echo "Appelé";
}
public static function call(): void {
$callable = 'self::myMethod';
call_user_func($callable);
}
}
$callable = Test::call();
// "Appelé";

Cependant, passer ces fonctions à la fonction is_callable ou les utiliser avec les types de paramètres callable ne générera pas le message de dépréciation. Pour éviter le message de dépréciation, les développeurs peuvent convertir les mots-clés parent, self et static dans le code callable en leurs noms de classe respectifs en utilisant la méthode magique ::class.

Une partie de la raison derrière ce changement est de permettre l’utilisation de fonctions appelables pour les propriétés typées. Cela les rend moins dépendantes du contexte.

MySQLi Ne Peut Plus Être Compilé Avec libmysql

Dans le passé, PHP a pris en charge deux bibliothèques pour connecter les bases de données MySQL : mysqlnd et libmysql. À partir de PHP 5.4, la première a été la bibliothèque par défaut. Cependant, il a été possible de compiler MySQLi via des extensions.

À partir de PHP 8.2, compiler une extension MySQLi avec libmysql ne sera plus pris en charge. Tenter de le faire entraînera une erreur de configuration :

./configure --with-mysqli=FOO

La liaison de mysqli avec une bibliothèque externe n’est plus prise en charge

Cela ne causera probablement pas d’erreurs significatives pour les développeurs. Toutefois, les deux principales fonctionnalités prises en charge par libmysql qui ne sont pas disponibles avec mysqlnd sont prises en charge pour la reconnexion automatique et l’authentification via LDAP et SASL.

Garde Ta Version PHP De WordPress À Jour

En tant que développeur, il est essentiel de tester ton code contre les versions à venir de PHP. Dans ce cas, les développeurs devraient commencer à tester leur code contre PHP 8.2 dès que possible pour s’assurer que ton code ne brise pas les sites des utilisateurs lorsqu’ils mettent à jour.

Ad background image

L’Environnement de Développement Parfait

Nous nous assurons que ton site est rapide, sécurisé et toujours accessible afin que tes visiteurs te fassent confiance. Les plans débutent à partir de $1.99/mois.

Choisis Ton Plan