A fost lansată prima versiune alfa a noului limbaj de programare PHP 8.1. Lansarea este planificată pentru 25 noiembrie. Principalele noutăți, deja disponibile pentru testare sau planificate pentru implementare în PHP 8.1:
- A fost adăugată suportul pentru enumerări, de exemplu, acum putem folosi următoarele construcții: enum Status { case Pending; case Active; case Archived; } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
- A fost adăugată suportul pentru fire de execuție ușoare, numite fibere (Fiber), care permit gestionarea paralelismului la un nivel inferior. Suportul pentru fibre este planificat să fie adăugat în cadrele Amphp și ReactPHP. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('after suspending'); // … }); $valueAfterSuspending = $fiber->start(); $fiber->resume('after resuming');
- A fost îmbunătățită implementarea cache-ului codului obiect (opcache), care acum permite cache-uirea informațiilor despre moștenirea claselor. Această optimizare a crescut performanța unor aplicații cu 5-8%.
- Operatorul de desfășurare în interiorul array-urilor „…$var”, care permite înlocuirea array-urilor existente la definirea unui nou array, a fost extins prin suportul pentru chei de tip string (anterior erau acceptate doar identificatorii numerici). De exemplu, acum putem folosi în cod: $array1 = ['a' => 1]; $array2 = ['b' => 2]; $array = ['a' => 0, …$array1, …$array2]; var_dump($array); // ['a' => 1, 'b' => 2]
- A apărut un nou tip „never”, care poate fi folosit pentru a informa analizoarele statice că o funcție oprește execuția programului, de exemplu, apelând o excepție sau executând funcția exit. function dd(mixed $input): never { exit; }
- A fost propusă o nouă funcție array_is_list, care permite determinarea că cheile dintr-un array sunt ordonate în ordine crescătoare numerică, începând de la 0: $list = ['a', 'b', 'c']; array_is_list($list); // true $notAList = [1 => 'a', 2 => 'b', 3 => 'c']; array_is_list($notAList); // false $alsoNotAList = ['a' => 'a', 'b' => 'b', 'c' => 'c']; array_is_list($alsoNotAList); // false
- A fost propusă posibilitatea de a suprascrie constantele într-o clasă în procesul de moștenire. Pentru a interzice suprascrierea constantelor din clasa părinte, se poate folosi cuvântul cheie „final”. class Foo { public const X = "foo"; final public const Z = "foo"; } class Bar extends Foo { public const X = "bar"; }
- Au fost propuse funcțiile fsync și fdatasync pentru a forța salvarea modificărilor din cache-ul pe disc. $file = fopen("sample.txt", "w"); fwrite($file, "Some content"); if (fsync($file)) { echo "Fișierul a fost salvat cu succes pe disc."; } fclose($file);
- A fost adăugată posibilitatea utilizării prefixelor „0o” și „0O” pentru numerele octale, pe lângă prefixul „0” folosit anterior. 016 === 0o16; // true 016 === 0O16; // true
- A fost propusă limitarea selectivă a utilizării $GLOBALS, ceea ce va duce la o pierdere a compatibilității retroactive, dar va permite accelerarea semnificativă a operațiunilor cu array-uri. De exemplu, se analizează posibilitatea interzicerii scrierii în $GLOBALS și a transmiterii $GLOBALS prin referință. Analiza a 2000 de pachete a arătat că numai 23 dintre ele vor fi afectate de această modificare. De exemplu, dacă propunerea este aprobată în 8.1, suportul pentru expresii precum: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS); va fi întrerupt.
- S-a continuat lucrul la transformarea funcțiilor din utilizarea resurselor pentru a manipula obiecte. Funcțiile finfo_* și imap_* au fost migrate pe obiecte.
- A fost declarată învechită transmiterea valorilor null ca argumente la funcțiile interne marcate ca non-nullable. În PHP 8.1, utilizarea construcțiilor de tipul str_contains("string", null) va genera un avertisment, iar în PHP 9, va genera o eroare.
- A fost adăugat suportul pentru algoritmii de hashing MurmurHash3 și xxHash.
Sursa: opennet.ro
