Nouveautés de PHP 8.2 : Nouvelles Fonctionnalités, Dépréciations et Corrections de Bugs
PHP 8.2 est sur le point d’arriver. Son lancement est prévu pour le 24 novembre.
PHP 8.2 est purement destiné à faciliter la vie des développeurs. La plupart des changements simplifient le processus de codage et rendent obsolètes certaines des anciennes fonctions. Il est toujours recommandé de passer à la dernière version de PHP pour optimiser la sécurité de votre site et vous habituer à la nouvelle syntaxe.
Examinons tous les changements apportés par PHP 8.2 afin que vous puissiez décider si cela vaut la peine de passer à la nouvelle version lorsque celle-ci sortira.
Nouvelles fonctionnalités de PHP 8.2
Dans cette section, nous allons passer en revue les changements et les nouvelles fonctionnalités introduites avec PHP 8.2.
Nouvelles classes à lecture seule
La nouvelle propriété de classe en lecture seule est apparue avec la version 8.1. PHP 8.2 l’améliore encore. Maintenant, vous pourrez déclarer une classe entière comme étant en lecture seule. Ainsi, toutes les propriétés de cette classe deviendront en lecture seule. Cela ne fonctionne pas pour les propriétés dynamiques – les déclarer comme readonly entraînera une erreur.
La déclaration de la classe ressemblait autrefois à ceci :
class ReadOnlyClass { public readonly int $number, public readonly int $anotherNumber }
Avec PHP 8.2, le processus a été profondément simplifié :
class ReadOnlyClass { public int $number, public int $anotherNumber }
Gardez à l’esprit qu’il ne sera pas possible de déclarer les fonctionnalités PHP suivantes :
- Enums – puisqu’ils ne peuvent pas du tout contenir de propriétés.
- Traits.
- Interfaces.
Autoriser vrai, nul et fausse comme types autonomes
Avec PHP 8.0, les utilisateurs ont été présentés avec le support des types d’union. Vous pouvez déclarer un type comme étant une union de deux types ou plus. Même si vous pouviez utiliser false et null comme types possibles, leur utilisation comme types autonomes n’était pas autorisée.
Avec PHP 8.2, il sera possible d’utiliser faux et nul comme types autonomes. Avec cet ajout, le système de types de PHP sera plus descriptif, car vous pourrez déclarer plus précisément les types de retour, de paramètres et de propriétés.
Prise en charge des valeurs de paramètres sensibles
PHP permet aux utilisateurs de suivre la pile d’appels à n’importe quel moment du programme. C’est particulièrement utile si vous voulez déboguer une application et voir pourquoi elle a échoué. Cependant, certaines traces de pile contiennent des informations sensibles que vous pouvez vouloir masquer.
PHP 8.2 va ajouter un nouvel attribut appelé SensitiveParameter. Il empêche que des informations sensibles soient affichées ou enregistrées lorsqu’une application rencontre des difficultés. En pratique, cela ressemblera à ceci :
function passwords( $publicpassword, #[\SensitiveParameter] $secretpassword ) { throw new \Exception('Error'); } passwords('publicpassword', 'secretpassword');
Nouvelles fonction mysqli_execute_query et méthode mysqli::execute_query
PHP 8.2 introduit une manière plus facile de gérer les requêtes MySQLi paramétrées. Avec la fonction mysqli_execute_query($sql, $params) et la méthode mysqli::execute_query, vous pouvez préparer, lier et exécuter des requêtes dans la même fonction. Après avoir exécuté une requête avec succès, vous obtenez l’objet mysqli_result.
La fonction proposée par le RFC ressemble à ceci :
foreach ($db->execute_query('SELECT * FROM user WHERE name LIKE ? AND type_id IN (?, ?)', [$name, $type1, $type2]) as $row) { print_r($row); }
Autoriser les constantes dans les Traits
Avec PHP 8.2, vous pourrez déclarer des constantes dans les traits. Jusqu’à présent, les traits permettaient aux utilisateurs de réutiliser du code en définissant des méthodes et des propriétés. Il sera désormais possible de déclarer des constantes dans les traits également.
Voici un exemple officiel de proposition de RFC :
trait Foo { public const FLAG_1 = 1; protected const FLAG_2 = 2; private const FLAG_3 = 2; public function doFoo(int $flags): void { if ($flags & self::FLAG_1) { echo 'Got flag 1'; } if ($flags & self::FLAG_2) { echo 'Got flag 2'; } if ($flags & self::FLAG_3) { echo 'Got flag 3'; } } }
Nouveaux types de formes normales disjonctives (DNF)
Avec PHP 8.2, vous pourrez utiliser une nouvelle fonctionnalité de types Disjunctive Normal Form (DNF). Il s’agit d’une manière normalisée d’organiser les expressions booléennes. Pour être exact, il s’agit d’une disjonction de conjonctions ou simplement d’un OU booléen de ET.
Un exemple de proposition de RFC se trouve ci-dessous :
// Accepts an object that implements both A and B, // OR an object that implements D. (A&B)|D // Accepts an object that implements C, // OR a child of X that also implements D, // OR null. C|(X&D)|null // Accepts an object that implements all three of A, B, and D, // OR an int, // OR null. (A&B&D)|int|null
AllowDynamicProperties Attribute
PHP 8.2 va déprécier les variables dynamiques dans les classes. Cela entraînera un message de dépréciation en PHP 8.2 et une ErrorException dans les futures versions de PHP.
Pour cette raison, un nouvel attribut #[AllowDynamicProperties] sera ajouté à PHP 8.2 afin d’autoriser les propriétés dynamiques pour les classes. Un exemple de RFC ressemble à ceci :
class Foo {} $foo = new Foo; // Deprecated: Creation of dynamic property Foo::$bar is deprecated $foo->bar = 1; // No deprecation warning: Dynamic property already exists. $foo->bar = 2;
Fonctionnalités obsolètes en PHP 8.2
Dans cette section, nous allons voir toutes les fonctionnalités qui seront dépréciées dans PHP 8.2.
Fonctions #utf8_encode() et utf8_decode()
Les fonctions utf8_encode() et utf8_decode() sont utilisées pour convertir les normes d’encodage ISO-8859-1 et UTF-8. En raison d’un manque de messages d’erreur, d’avertissements, et d’un support limité de l’encodage, PHP 8.2 va déprécier ces fonctions, tandis que PHP 9.0 les exclura entièrement. Par ailleurs, les utilisateurs pourront utiliser les extensions iconv ou intl pour convertir la norme d’encodage.
Mbstring : Encodages d’entités Base64, Uuencode, QPrint et HTML
Mbstring est utilisé pour convertir depuis et vers plusieurs normes de codage de caractères telles qu’UTF-8/16/32 et ISO-8859-1. Il prend également en charge les entités Base64, Quoted-Printable, Uuencode et HTML.
Toutefois, ces formats traitent les informations sous forme d’octets bruts et non de séquences d’octets. Il est aussi intéressant de noter que PHP dispose déjà de fonctions distinctes pour coder/décoder ces formats. Ainsi, PHP 8.2 va déprécier l’extension mbstring avec les encodages étiquetés suivants :
- BASE64
- UUENCODE
- HTML-ENTITIES
- html (alias de HTML-ENTITIES)
- Quoted-Printable
- qprint (alias de Quoted-Printable)
Appelables partiellement soutenus
PHP 8.2 va déprécier les appelables partiellement supportés qui ne fonctionnent pas avec le pattern $callable(). La liste des éléments appelables dépréciés se trouve ci-dessous :
$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"];
Pour éviter le message de dépréciation, les utilisateurs peuvent convertir tous les mots-clés self, parent et static en leurs noms de classe correspondants.
${var} Interpolation des chaînes de caractères
PHP permet aux utilisateurs de remplacer les valeurs des variables dans une chaîne littérale par des guillemets doubles, comme dans les exemples suivants :
- “$myname” – variables directement incorporées.
- “{$myname}” – accolades à l’extérieur de la variable.
- “${myname}” – accolades après le signe dollar.
- ” ${expr}” – variables équivalentes à l’utilisation de (chaîne de caractères) ${expr}
Tout en offrant la même fonctionnalité, la syntaxe des deux dernières options est assez complexe. C’est pourquoi elles seront dépréciées en PHP 8.2. Vous pourrez toujours utiliser les deux premières options sans problème.
Autres modifications de PHP 8.2
Amélioration aléatoire de l’extension
PHP offre un certain nombre de fonctions pour la génération de nombres aléatoires. Avec PHP 8.2, certaines d’entre elles seront déplacées vers une nouvelle extension aléatoire. Cette extension sera incluse dans PHP par défaut, et il n’y aura pas d’option pour la désactiver.
Voici une liste de toutes les fonctions et constantes qui seront déplacées vers l’extension aléatoire. Gardez à l’esprit qu’elles resteront dans l’espace de noms global.
- Fonction random_bytes
- Fonction random_int
- Fonction rand
- Fonction getrandmax
- Fonction srand
- Fonction lcg_value
- Fonction mt_rand
- Fonction mt_getrandmax
- Fonction mt_srand
- Constante MT_RAND_PHP
- Constante MT_RAND_MT19937
MySQLi ne prend plus en charge libmysql
La fonction ksort trie un tableau par clé dans l’ordre croissant. PHP 8.2 introduira une correction de bug pour rendre la sortie du paramètre SORT_REGULAR cohérente avec les autres paramètres. Jusqu’à PHP 8.2, il donnait la priorité aux touches alphabétiques avant les touches numériques.
Désormais, ksort placera les touches numériques avant les touches alphabétiques lors du tri. En pratique, les clés triées ressembleront à ceci :
["1" => '', "2" => '', "a" => '', , "b" => ''];
Au lieu de :
["a" => '', "b" => '', "1" => '', , "2" => ''];
La fonction str_split renvoie des tableaux vides pour les chaînes vides
Une autre correction de bogue est destinée à la fonction str_split. Elle est utilisée pour diviser une chaîne de caractères en un tableau.
Jusqu’à PHP 8.2, si cette fonction recevait une chaîne vide, elle retournait également une chaîne vide. PHP 8.2 introduit un correctif à ce bug, et str_split retournera un tableau vide si on lui donne une chaîne vide.
Comment changer la version de PHP
En général, les fournisseurs d’hébergement vous offrent un moyen facile de passer d’une version de PHP à une autre. Si vous utilisez le hPanel de Hostinger, il vous suffit de sélectionner votre plan d’hébergement et de rechercher Configuration PHP :
Vous trouverez ici toutes les dernières versions stables de PHP. Sélectionnez la version souhaitée et appuyez sur “Update” pour enregistrer les modifications.
Dans cet utilitaire, il est aussi possible de gérer les extensions et les options PHP pour toutes les versions individuellement.
Conclusion
PHP 8.2 offre de nombreuses améliorations par rapport aux versions précédentes. Elle introduit un certain nombre de nouvelles fonctionnalités, comme les classes en lecture seule, supprime plusieurs implémentations obsolètes à la syntaxe complexe, et corrige d’importants bogues pour rationaliser le flux de développement et faciliter l’utilisation de PHP.
Nous espérons que cet article vous a aidé à vous préparer au lancement prochain de PHP 8.2. Nous attendons avec impatience la sortie de la nouvelle version le 24 novembre prochain !