Llançament del llenguatge de programació PHP 8.1

Després d'un any de desenvolupament, es va presentar el llançament del llenguatge de programació PHP 8.1. La nova branca inclou una sèrie de novetats, així com diversos canvis que trenquen la compatibilitat.

Millores clau a PHP 8.1:

  • S'ha afegit suport per a enumeracions, per exemple, ara podeu utilitzar les construccions següents: enum Status { case Pending; cas actiu; cas Arxivat; } class Post { funció pública __construct (estat privat $estat = Estat::Pendent; ) {} funció pública setStatus(Estat $estat): void { // … } } $post->setStatus(Estat::Active);
  • S'ha afegit suport per a fils lleugers anomenats Fibres, que us permeten gestionar els fils d'execució a un nivell baix. Es preveu afegir suport de fibra als marcs Amphp i ReactPHP. $fibra = nova Fibra (funció (): void { $valorAfterResuming = Fibra::suspend('després de suspendre'); // ... }); $valorAfterSuspending = $fibra->inici (); $fiber->reprendre('després de reprendre');
  • La implementació de la memòria cau del codi objecte (opcache) s'ha millorat, fent possible la memòria cau d'informació sobre l'herència de classes. L'optimització va permetre augmentar el rendiment d'algunes aplicacions en un 5-8%. Altres optimitzacions inclouen l'optimització de l'operació JIT, la implementació del suport JIT per a l'arquitectura ARM64 (AArch64), l'acceleració de la resolució de noms, l'optimització de les biblioteques timelib i ext/date, l'augment del rendiment de serialització i deserialització, optimització de get_declared_classes(), explode() , funció strtr(), strnatcmp(), dechex(). En general, hi ha un augment del rendiment del 23.0% per a Symfony Demo i un 3.5% per a WordPress.
  • L'operador de desempaquetat dins de les matrius "...$var", que permet la substitució de les matrius existents quan es defineix una nova matriu, s'ha estès per suportar claus de cadena (abans només es suportaven els identificadors digitals). Per exemple, ara podeu utilitzar al codi: $array1 = [“a” => 1]; $array2 = ["b" => 2]; $array = [“a” => 0, …$array1, …$array2]; var_dump($array); // ["a" => 1, "b" => 2]
  • Es permet utilitzar la paraula clau "new" als inicialitzadors, com ara en definicions de funcions com a paràmetre predeterminat o en atributs d'argument. classe MyController { funció pública __construct( registrador privat $logger = nou NullLogger (), ) {} }
  • És possible marcar les propietats de classe per a l'accés només de lectura (la informació d'aquestes propietats només es pot escriure una vegada, després de la qual no estarà disponible per al canvi). class PostData { public function __construct( cadena de lectura pública $títol, només lectura pública DateTimeImmutable $data, ) {} } $post = new Post('Títol', /* … */); $post->title = 'Altres'; > Error: No es pot modificar la propietat de només lectura Post::$title
  • S'ha implementat una nova sintaxi per als objectes cridables: ara es pot formar un tancament cridant una funció i passant-li el valor "..." com a argument (és a dir, myFunc(...) en lloc de Closure::fromCallable('myFunc). ')): funció foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • S'ha afegit un suport complet per als tipus d'intersecció, que us permet crear nous tipus combinant els existents. A diferència dels tipus d'unió, que defineixen col·leccions de dos o més tipus, els tipus d'intersecció requereixen la presència no de cap dels tipus enumerats, sinó de tots els tipus especificats del conjunt per omplir. function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Hi ha un nou tipus "mai" que es pot utilitzar per informar als analitzadors estàtics que una funció finalitzarà l'execució del programa, per exemple, llançant una excepció o executant la funció de sortida. funció dd($entrada mixta): mai { sortida; }
  • S'ha proposat una nova funció array_is_list, que permet determinar que les claus de la matriu estan ordenades en ordre de valors numèrics creixents, a partir de 0: $list = [“a”, “b”, “c”]; array_is_list($lista); // true $notAList = [1 => “a”, 2 => “b”, 3 => “c”]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($tambéNotAList); // fals
  • Ara podeu utilitzar la paraula clau "final" per evitar que les constants de classe pare s'anul·lin. class Foo { final public const X = "foo"; } class Bar extends Foo { public const X = "bar"; > Error fatal: Bar::X no pot anul·lar la constant final Foo::X }
  • Es proposen les funcions fsync i fdatasync per forçar que els canvis es desin de la memòria cau del disc. $fitxer = fopen("mostra.txt", "w"); fwrite($fitxer, "Algun contingut"); if (fsync($fitxer)) { echo "El fitxer s'ha conservat correctament al disc."; } fclose($fitxer);
  • S'ha afegit la possibilitat d'utilitzar els prefixos "0o" i "0O" per als nombres octals, a més del prefix "0" utilitzat anteriorment. 016 === 0o16; // cert 016 === 0O16; // cert
  • Es proposa limitar selectivament l'ús de $GLOBALS, la qual cosa comportarà una violació de la compatibilitat enrere, però permetrà accelerar significativament les operacions amb matrius. Per exemple, s'està considerant la possibilitat de desactivar l'escriptura a $GLOBALS i passar $GLOBALS per punter. Una anàlisi de 2000 paquets va mostrar que només 23 d'ells es veurien afectats per aquest canvi. Per exemple, si s'aprova la proposta, 8.1 deixarà de suportar expressions com ara: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
  • Els mètodes interns haurien de retornar ara el tipus correcte. A PHP 8.1, retornar un tipus que no coincideix amb la declaració de la funció produirà un avís, però a PHP 9.0 l'avís es substituirà per un error.
  • Es va continuar treballant en la transferència de funcions de l'ús de recursos a la manipulació d'objectes. Les funcions finfo_* i imap_* s'han transferit als objectes.
  • Passar valors nuls com a arguments a les funcions internes marcades com a no nul·les ha quedat obsolet. A PHP 8.1, l'ús de construccions com str_contains("cadena", null) donarà lloc a un avís, i a PHP 9 a un error.
  • S'ha afegit suport per als algorismes de hash MurmurHash3 i xxHash.

Font: opennet.ru

Afegeix comentari