La première version alpha de la nouvelle branche du langage de programmation PHP 8.2 a été présentée. La sortie est prévue pour le 24 novembre. Les principales nouveautés, déjà disponibles pour les tests ou prévues dans PHP 8.2 :
- Ajout de types distincts «false» et «null», qui peuvent être utilisés, par exemple, pour retourner un indicateur d'erreur ou une valeur vide. Auparavant, «false» et «null» ne pouvaient être utilisés qu'en combinaison avec d'autres types (par exemple, «string|false»), mais maintenant ils peuvent être utilisés séparément : function alwaysFalse(): false { return false; }
- Ajout de la possibilité de marquer une classe comme étant uniquement en lecture. Les propriétés de telles classes peuvent être définies une seule fois, après quoi elles ne pourront plus être modifiées. Auparavant, seules des propriétés individuelles pouvaient être marquées comme en lecture, mais maintenant ce mode peut être activé pour toutes les propriétés de la classe à la fois. La spécification du drapeau «readonly» au niveau de la classe bloque également l'ajout dynamique de propriétés à la classe. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = ‘wrong’; // Erreur : Impossible de créer une propriété dynamique Post::$unknown
- La possibilité de créer dynamiquement des propriétés dans une classe (comme «post->unknown» dans l'exemple ci-dessus) a été déclarée obsolète. Dans PHP 9.0, l'accès aux propriétés non définies dans la classe générera une erreur (ErrorException). Les classes fournissant les méthodes __get et __set pour créer des propriétés, ou les propriétés dynamiques dans stdClass continueront de fonctionner sans changements, seule la prise en charge de l'accès implicite aux propriétés non existantes sera interrompue afin de protéger le développeur contre des erreurs cachées. Pour conserver le fonctionnement de l'ancien code, un attribut «#[AllowDynamicProperties]» a été proposé, permettant l'utilisation de propriétés dynamiques.
- Il est désormais possible de filtrer les paramètres sensibles dans les données de trace de pile générées lors d'une erreur. La suppression de certaines informations peut être nécessaire lorsque les détails des erreurs survenant sont automatiquement envoyés à des services tiers qui suivent les problèmes et en informent les développeurs. Par exemple, on peut exclure des traces les paramètres incluant des noms d'utilisateur, des mots de passe et des variables d'environnement. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception(‘Error’); } test(‘foo’, ‘password’, ‘baz’); Fatal error: Uncaught Exception: Error in test.php:8 Stack trace: #0 test.php(11): test(‘foo’, Object(SensitiveParameterValue), ‘baz’) #1 {main} thrown in test.php on line 8
- La possibilité de substitution de valeurs de variables dans des chaînes via les expressions «${var}» et ${(var)}» est déclarée obsolète. Le support des substitutions couramment utilisées «{$var}» et «$var» est maintenu. Par exemple : «Hello {$world}»; OK «Hello $world»; OK «Hello ${world}»; Déprécié : utilisation de ${} dans les chaînes est dépréciée
- Les objets appelables partiellement supportés (callable), qui peuvent être appelés via «call_user_func($callable)», mais ne supportent pas l'appel sous la forme «$callable()», sont déclarés obsolètes : «self::method» «parent::method» «static::method» [«self», «method»] [«parent», «method»] [«static», «method»] [«Foo», «Bar::method»] [new Foo, «Bar::method»]
- La conversion de la casse des caractères, indépendante de la locale, est désormais mise en œuvre. Les fonctions telles que strtolower() et strtoupper() convertissent toujours la casse des caractères dans la plage ASCII même avec la locale définie sur «C».
Source : opennet.ru
