Bol prvý alfa-release novej vetvy programovacieho jazyka PHP 8.1. Uvoľnenie je naplánované na 25. novembra. Hlavné novinky, ktoré sú už k dispozícii na testovanie alebo plánované na implementáciu v PHP 8.1:
- Pridaná podpora pre vymenovania, napríklad je možné použiť nasledujúce konštrukcie: 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);
- Pridaná podpora pre ľahké vlákna nazývané fiber, ktoré umožňujú spravovať paralelizáciu na nízkej úrovni. Podpora fiberov sa plánuje pridať do frameworkov Amphp a ReactPHP. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('after suspending'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber->resume('after resuming');
- Zlepšená implementácia cache objektového kódu (opcache), v ktorej sa objavila možnosť cachovania informácií o dedičnosti tried. Optimalizácia umožnila zvýšiť výkon niektorých aplikácií o 5-8%.
- Operátor rozbaľovania vo vnútri polí '…$var', ktorý umožňuje substitúciu existujúcich polí pri definovaní nového poľa, bol rozšírený o podporu reťazcových kľúčov (predtým boli podporované len číselné identifikátory). Napríklad, teraz je možné používať v kóde: $array1 = ['a' => 1]; $array2 = ['b' => 2]; $array = ['a' => 0, …$array1, …$array2]; var_dump($array); // ['a' => 1, 'b' => 2]
- Objavil sa nový typ 'never', ktorý je možné použiť na informovanie statických analyzátorov o tom, že funkcia prestáva vykonávať program, napríklad vyvolaním výnimky alebo vykonaním funkcie exit. function dd(mixed $input): never { exit; }
- Navrhnutá nová funkcia array_is_list, ktorá umožňuje určiť, že kľúče v poli sú usporiadané v poradí zvyšovania číselných hodnôt, počnúc 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
- Navrhnutá možnosť predefinovania konštánt v triede počas dedičstva. Na zakázanie predefinovania konštánt rodičovskej triedy je možné použiť kľúčové slovo „final“. class Foo { public const X = "foo"; final public const Z = "foo"; } class Bar extends Foo { public const X = "bar"; }
- Navrhnuté funkcie fsync a fdatasync pre nútené uloženie zmien z diskového cache. $file = fopen("sample.txt", "w"); fwrite($file, "Some content"); if (fsync($file)) { echo "Súbor bol úspešne uložený na disk."; } fclose($file);
- Pridaná možnosť použitia prefixov „0o“ a „0O“ pre osmičkové čísla, okrem predtým používaného prefixu „0“. 016 === 0o16; // true 016 === 0O16; // true
- Navrhnuté selektívne obmedzenie použitia $GLOBALS, čo povedie k porušeniu spätnej kompatibility, ale umožní výrazne zrýchliť operácie s poľami. Napríklad sa zvažuje možnosť zakázania zápisu do $GLOBALS a predávania $GLOBALS ako ukazovateľa. Analýza 2000 balíkov ukázala, že len 23 z nich sa dotkne tejto zmeny. Napríklad, v prípade schválenia návrhu v 8.1 bude ukončená podpora takýchto výrazov, ako sú: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
- Pokračuje práca na prechode funkcií z používania zdrojov na manipuláciu s objektmi. Na objekty boli preložené funkcie finfo_* a imap_*.
- Vyhlásil sa za zastarané predávanie hodnôt null ako argumentov interných funkcií, označených ako non-nullable. V PHP 8.1 použitie konštrukcií typu str_contains("string", null) povedie k varovaniu, a v PHP 9 k chybe.
- Pridaná podpora algoritmov hashovania MurmurHash3 a xxHash.
Zdroj: opennet.ru
