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
Dans 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.
Meilleur hébergement web à petit prix - Excellence Made in France
Saisissez l'opportunité avec LWS : hébergement web en promo à -50% ! Commencez à seulement 1,49€/mois plutôt que 2,99€. Profitez de performances solides 🚀 et d'un support client remarquable. 🌟
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.