brand-lws-red brand-lws-white
Blog

PHP 8.2 : nouvelles fonctionnalités et améliorations prévues pour fin 2022

08 septembre 2022

PHP 8.2 : nouvelles fonctionnalités et améliorations prévues pour fin 2022

PHP (Hypertext Preprocessor) est le langage de programmation le plus utilisé en ligne pour la création d’applications web dynamiques. Il est constamment mis à jour et les nouvelles versions apportent souvent des nouvelles fonctionnalités et corrigent les bogues de sécurité. PHP 8.2 est la prochaine version du langage de programmation PHP dont la publication est annoncée pour la fin de l’année 2022.

Et comme pour toute nouvelle version, les améliorations de performances, les dépréciations et les nouvelles fonctionnalités sont attendues dans la version 8.2. Quels sont ces divers changements ? Lisez cet article pour les découvrir !

Nouvelles fonctionnalités et améliorations de PHP 8.2

PHP 8.2 : nouvelles fonctionnalités et améliorationsDans cette partie, nous allons parcourir les nouvelles fonctionnalités attendues dans la version 8.2 de PHP.

1. Arrivée des nouvelles classes readonly 

La fonctionnalité readonly a été ajoutée à PHP avec la version 8.1. Cependant, jusqu’ici, pour utiliser cette fonctionnalité, vous devez déclarer chaque propriété de la classe indépendamment. Par exemple, avant PHP 8.2, vous devez écrire les lignes de codes suivants pour déclarer les propriétés de la classe comme readonly :

class MyClass 
{ 
public readonly string $myValue, 
public readonly int $myOtherValue 
public readonly string $myAnotherValue 
public readonly int $myYetAnotherValue 
}

Avec l’arrivée de PHP 8.2, l’écriture de ce code est simplifiée. Vous pouvez alors écrire ceci :

readonly class MyClass 
{ 
public string $myValue, 
public int $myOtherValue 
public string $myAnotherValue 
public int $myYetAnotherValue 
}

Ce qui va automatiquement marquer toutes les instances de la classe comme readonly. Cette RFC indique également que cette façon de coder empêche la création de propriétés dynamiques.

2. Suppression de paramètres sensibles dans les traces de retour

Les traces de pile (back traces) sont utilisées dans PHP à des fins de débogage. C’est notamment lorsqu’une erreur de codes est survenue, un journal d’erreurs est envoyé à un service spécifique destiné en assurer la gestion. Cela permet aussi aux développeurs de savoir quelles données ont été transmises lors de l’appel d’une fonction.

L’avantage de cette fonctionnalité est qu’elle facilite l’identification et la correction rapide des erreurs. Mais la mauvaise nouvelle est que cette fonctionnalité peut parfois transmettre des données sensibles (mot de passe, identifiants, numéro de cartes bancaires) à des services tiers.

Dans les traces de piles, occasionnellement les mots de passe sont transmis en clair, ce qui est un véritable risque de sécurité. Au lieu de cela, PHP 8.2 apporte une nouvelle fonctionnalité pour masquer ces valeurs sensibles lors de leur transmission. Le nouvel attribut \SensitiveParameter a été ajouté pour éviter ce risque de sécurité.

Ainsi, lorsque vous marquez une valeur sensible comme \SensiviteParameter, elle ne sera pas affichée en clair dans les journaux d’erreurs.

3. Autorisation de null et false comme des types autonomes

Les types union sont utilisés depuis l’arrivée de PHP 8.0 afin de prendre en charge les valeurs de différents types. Avant PHP 8.2, ces deux types étaient utilisés obligatoirement avec une partie d’un type d’union. Ainsi, leur exécution comme de types autonomes affichait une erreur fatale.

null était considéré jusqu’ici comme un type d’unité ne contenant aucune information, tandis que false servait à transmettre un état d’erreur ou d’absence.

Dans PHP 8.2, vous pouvez désormais déclarer null et false comme des types autonomes. De plus, true peut être maintenant déclaré en tant que type, ce qui n’était pas le cas avant.

4. Une nouvelle fonction mysqli_execute_query

Cette nouvelle fonction a été ajoutée afin de réduire la complexité dans l’exécution de requêtes paramétrées. Elle est une combinaison de 3 autres fonctions, notamment mysqli_prepare(), mysqli_execute(), mysqli_stmt_get_result().

Cette dernière permettra aux développeurs d’exécuter les requêtes MySQLi sans risquer l’échappement dangereux de valeurs des utilisateurs. Ainsi, au lieu d’écrire ce code complexe ci-dessous :

$statement = $db->prepare('SELECT * FROM user WHERE name LIKE ? AND type_id IN (?, ?)'); 
$statement->execute([$name, $type1, $type2]); 
foreach ($statement->get_result() as $row) { 
print_r($row); 
}

Vous pouvez simplement exécuter le même code, mais sous forme simplifiée de la manière suivante :

foreach ( $db -> execute_query ( 'SELECT * FROM user WHERE name LIKE ? AND type_id IN (?, ?)' , [ $name , $type1 , $type2 ] ) as $row ) {
 print_r ( $row ) ; 
}

Étant donné que PHP 8.1 a déjà aboli la nécessité de spécifier le type de valeurs dans un premier argument debind_param(), le code ci-dessus sera exécuté sans retourner une erreur.

5. Récupération des propriétés des énumérations dans les expressions const

PHP 8.2 autorise l’utilisation de ->/ ?-> afin de récupérer les énumérations dans les expressions constantes. Cette nouvelle RFC permettra la récupération de propriétés name et value dans les différents endroits où les objets enum ne sont pas autorisés. C’est notamment dans les clés de tableaux.

Ainsi, l’exécution du code ci-dessous est désormais autorisée :

const C = [ self :: B -> value => self :: B ] ;

6. Autorisation de définir les constantes dans les traits

Dans le langage PHP, les traits permettent de réutiliser les codes entre les classes, ensuite définir les méthodes et les propriétés. Auparavant, il n’était pas possible de les utiliser avec les constantes. Ainsi, les mesures de contournement consistaient à la définition de constantes dans sa classe de composition ou alternativement dans une interface implémentée.

Mais avec PHP 8.2, vous pouvez définir les constantes dans les traits comme pour les propriétés ou les méthodes.

7. Une nouvelle fonctionnalité memory_reset_peak_usage

PHP 8.2 ajoute une nouvelle fonctionnalité memory_reset_peak_usage qui permettra aux développeurs de réinitialiser l’utilisation maximale de la mémoire. Cette RFC est particulièrement utile pour les actions itérables.

Vous pouvez ainsi l’utiliser en complémentarité avec la fonctionnalité memory_get_peak_usage afin de savoir la mémoire allouée pour chaque exécution d’un code.

Plusieurs dépréciations attendues dans PHP 8.2

1. Dépréciation de l’interpolation de chaîne ${}

Habituellement, les guillemets doubles ('') sont utilisés dans PHP dans le but d’intégrer les variables dans les chaînes. Cela est possible selon quatre manières différentes :

  • Intégration directe de variables avec “$foo”
  • Utilisation des accolades en dehors de la variable avec “{$foo}”
  • Utilisation des accolades après le signe dollar avec “${foo}”
  • Variables avec “${expr}”, qui équivaut à (string) ${expr}

PHP 8.2 déprécie les deux dernières pour éviter le chevauchement de syntaxe et la confusion avec les deux premières méthodes d’interpolation de chaînes.

2. Dépréciation de fonctions utf8_encode et utf8_decode

utf8_encode et utf8_decode sont utilisés dans PHP afin de permettre la conversion de chaînes encodées en ISO-8859-1 (« Latin 1 ») vers UTF-8 et inversement. Cependant, PHP 8.2 déprécie ces deux fonctions en raison d’une confusion souvent établie avec d’autres types d’encodage (code Windows 1252, notamment) et leur utilisation qui est inappropriée.

Vous aurez donc un avis de dépréciation en les utilisant avec la version PHP 8.2.

3. Dépréciation de propriétés dynamiques

Dans PHP, l’écriture dans une propriété non déclarée conduit habituellement à la création d’une propriété dynamique à la place. Tout le problème avec les propriétés dynamiques est qu’elles induisent l’apparition de bogues même lors d’une simple erreur de codes. Le cas typique est notamment la déclaration de propriétés à l’extérieur de la classe.

Cette nouvelle RFC propose la dépréciation et la suppression de propriétés dynamiques ultérieures, sauf lorsque la classe cible les autorise formellement.

Vous aurez alors un avis de dépréciation en les utilisant. Cependant, les développeurs qui souhaitent continuer à utiliser les propriétés dynamiques dans leur code doivent se servir du nouvel attribut #[AllowDynamicProperties]. Et pour éviter tout avis de dépréciation, chaque classe devra être marquée avec ce nouvel attribut.

4. Dépréciation de callables partiellement supportés

Les callables ou les appelants sont appelés « partiellement supportés », car vous pouvez interagir avec eux qu’en utilisant la fonction call_user_func($callable)et non directement avec $callable().

Les appelants concernés sont entre autres :

"self::method" 
"parent::method" 
"static::method" 
[ "self" , "method" ] 
[ "parent" , "method" ] 
[ "static" , "method" ] 
[ "Foo" , "Bar::method" ] 
[ new Foo , "Bar::method" ]

Ils afficheront un avis de dépréciation dans PHP 8.2 et leur support sera supprimé dans PHP 9.

5. Certains encodages de mbstring deviennent obsolètes

L’extension mbstring est utilisée en PHP afin de prendre en charge les chaînes non ASCII. Elle fournit des fonctions de chaîne spécifiques qui aident à gérer les encodages multi-octets en PHP. Cette extension permet ainsi la traduction de plusieurs jeux de caractères, notamment l’Unicode et d’autres entités HTML.

Les types d’encodages qui sont concernés et qui lèveront une notification de dépréciation sont notamment :

  • BASE64
  • UUENCODE
  • HTML-ENTITIES
  • html (alias de HTML-ENTITIES)
  • Quoted-Printable
  • qprint (alias de Quoted-Printable)

Toutefois, le retrait de ces encodages dans l’extension mbstring n’aura aucun impact sur les sites web qui les prennent encore en charge. PHP 8.2 intègre déjà des fonctions dédiées pour encoder et décoder les types concernés.

Besoin d'un hébergement web au meilleur prix ?

LWS vous conseille sa formule d’hébergement en promotion à -25% (offre à partir de 1,49€ par mois au lieu de 1,99 €). Non seulement les performances sont au rendez-vous mais vous profitez en plus d’un support exceptionnel.

Découvrir l'offre

Hébergement web au meilleur prix

Conclusion

PHP est un langage de programmation en constante évolution. Dans cet article, vous avez découvert les nouvelles fonctionnalités et les dépréciations attendues dans la version 8.2. N’hésitez pas à consulter régulièrement notre blog afin d’en savoir plus quant aux évolutions attendues dans le monde du web ! 😁

Que pensez-vous de ces changements ? Avez-vous des questions ? Utilisez la section commentaires pour nous écrire.

Commentaires (0)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Serveurs performants haut de gamme

Serveurs performants
haut de gamme

Logiciels avec installation en 1 clic

Logiciels avec
l'installation en 1 clic

Sécurité optimale pour vos sites

Sécurité optimale
pour vos sites

Confiance, 100% en France

Confiance, 100%
en France

100% Satisfait ou Remboursé

100% Satisfait
ou Remboursé