La première version alpha de la nouvelle branche du langage de programmation PHP 8.1 a été présentée. La sortie est prévue pour le 25 novembre. Les principales innovations déjà disponibles en test ou prévues pour être implémentées dans PHP 8.1 :
- Ajout de la prise en charge des énumérations, par exemple, vous pouvez désormais utiliser les constructions suivantes : enum Status { case Pending ; cas Actif ; cas Archivé; } class Post { public function __construct(private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
- Ajout de la prise en charge de threads légers appelés Fibres qui vous permettent de contrôler la parallélisation à un niveau bas. Le support Fibre devrait être ajouté aux frameworks Amphp et ReactPHP. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('after suspending'); // ... }); $valueAfterSusending = $fiber->start(); $fiber->resume('après reprise');
- L'implémentation du cache de code objet (opcache) a été améliorée, permettant de mettre en cache des informations sur l'héritage de classe. L'optimisation a permis d'augmenter les performances de certaines applications de 5 à 8 %.
- L'opérateur de décompression à l'intérieur des tableaux "...$var", qui permet la substitution des tableaux existants lors de la définition d'un nouveau tableau, a été étendu pour prendre en charge les clés de chaîne (auparavant, seuls les identifiants numériques étaient pris en charge). Par exemple, vous pouvez désormais utiliser dans le code : $array1 = [« a » => 1]; $tableau2 = ["b" => 2]; $tableau = ["a" => 0, …$tableau1, …$tableau2]; var_dump($tableau); // ["a" => 1, "b" => 2]
- Il existe un nouveau type « jamais » qui peut être utilisé pour informer les analyseurs statiques qu'une fonction mettra fin à l'exécution du programme, par exemple en lançant une exception ou en exécutant la fonction de sortie. function dd(mixed $input): never { exit; }
- Une nouvelle fonction array_is_list a été proposée, qui permet de déterminer que les clés du tableau sont classées par ordre de valeurs numériques croissantes, à partir de 0 : $list = ["a", "b", "c"]; array_is_list($liste); // vrai $notAList = [1 => « a », 2 => « b », 3 => « c »]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // FAUX
- La possibilité de redéfinir les constantes d'une classe lors du processus d'héritage a été proposée. Pour éviter le remplacement des constantes de la classe parent, vous pouvez utiliser le mot-clé « final ». classe Foo { public const X = "foo"; const publique finale Z = "foo" ; } classe Bar extends Foo { public const X = "bar"; }
- Les fonctions fsync et fdatasync sont proposées pour forcer la sauvegarde des modifications depuis le cache disque. $file = fopen("exemple.txt", "w"); fwrite($file, "Du contenu"); if (fsync($file)) { echo "Le fichier a été conservé avec succès sur le disque."; } fclose ($ fichier);
- Ajout de la possibilité d'utiliser les préfixes "0o" et "0O" pour les nombres octaux, en plus du préfixe "0" précédemment utilisé. 016 === 0o16 ; // vrai 016 === 0O16; // vrai
- Il est proposé de limiter sélectivement l'utilisation de $GLOBALS, ce qui entraînera une violation de la rétrocompatibilité, mais permettra d'accélérer considérablement les opérations avec les tableaux. Par exemple, la possibilité de désactiver l'écriture dans $GLOBALS et de passer $GLOBALS par pointeur est à l'étude. Une analyse de 2000 colis a montré que seuls 23 d'entre eux seraient concernés par ce changement. Par exemple, si la proposition est approuvée, la version 8.1 ne prendra plus en charge les expressions telles que : $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBAUX; non défini($GLOBALS); par_ref($GLOBALS);
- Les travaux se sont poursuivis sur le transfert des fonctions de l'utilisation des ressources à la manipulation des objets. Les fonctions finfo_* et imap_* ont été transférées vers les objets.
- La transmission de valeurs nulles comme arguments aux fonctions internes marquées comme non nullables est obsolète. En PHP 8.1, l'utilisation de constructions comme str_contains("string", null) entraînera un avertissement, et en PHP 9 une erreur.
- Ajout de la prise en charge des algorithmes de hachage MurmurHash3 et xxHash.
Source: opennet.ru
