Vydanie programovacieho jazyka PHP 8.1

Po roku vývoja bolo predstavené vydanie programovacieho jazyka PHP 8.1. Nová pobočka obsahuje sériu nových funkcií, ako aj niekoľko zmien, ktoré narúšajú kompatibilitu.

Kľúčové vylepšenia v PHP 8.1:

  • Pridaná podpora pre enumerácie, napríklad teraz môžete použiť nasledujúce konštrukcie: enum Status { case Pending; puzdro Aktívne; prípad archivovaný; } 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 s názvom Fibers, ktoré vám umožňujú spravovať spúšťacie vlákna na nízkej úrovni. Plánuje sa pridanie podpory vlákien do rámcov Amphp a ReactPHP. $vlákno = nové vlákno(funkcia (): void { $valueAfterResuming = vlákno::suspend('po pozastavení'); // ... }); $valueAfterSuspending = $vlákno->start(); $fiber->resume('po obnovení');
  • Vylepšená bola implementácia vyrovnávacej pamäte objektového kódu (opcache), ktorá umožňuje ukladať do vyrovnávacej pamäte informácie o dedičnosti tried. Optimalizácia umožnila zvýšiť výkon niektorých aplikácií o 5-8%. Medzi ďalšie optimalizácie patrí optimalizácia prevádzky JIT, implementácia podpory JIT pre architektúru ARM64 (AArch64), zrýchlenie rozlíšenia názvov, optimalizácia knižníc timelib a ext/date, zvýšenie výkonu serializácie a deserializácie, optimalizácia funkcie get_declared_classes(), explode() , funkcia strtr(), strnatcmp(), dechex(). Vo všeobecnosti sa výkon Symfony Demo zvýšil o 23.0 % a pre WordPress o 3.5 %.
  • Operátor rozbaľovania vo vnútri polí "...$var", ktorý umožňuje nahradenie existujúcich polí pri definovaní nového poľa, bol rozšírený o podporu reťazcových kľúčov (predtým boli podporované iba digitálne identifikátory). Napríklad teraz môžete v kóde použiť: $array1 = [“a” => 1]; $pole2 = ["b" => 2]; $pole = [“a” => 0, …$pole1, …$pole2]; var_dump($pole); // ["a" => 1, "b" => 2]
  • Je povolené používať kľúčové slovo "new" v inicializátoroch, napríklad v definíciách funkcií ako predvolený parameter alebo v atribútoch argumentov. class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {} }
  • Je možné označiť vlastnosti triedy pre prístup len na čítanie (informácie v takýchto vlastnostiach je možné zapísať iba raz, potom už nebudú dostupné na zmenu). class PostData { public function __construct( public readonly string $title, public readonly DateTimeImmutable $date, ) {} } $post = new Post('Title', /* … */); $post->title = 'Iné'; > Chyba: Nemožno upraviť vlastnosť len na čítanie Post::$title
  • Pre volateľné objekty bola implementovaná nová syntax – uzáver teraz možno vytvoriť volaním funkcie a odovzdaním jej hodnoty „...“ ako argumentu (t. j. myFunc(...) namiesto Closure::fromCallable('myFunc ')): function foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Pridaná plná podpora pre typy križovatiek, čo vám umožňuje vytvárať nové typy kombináciou existujúcich. Na rozdiel od zjednotených typov, ktoré definujú kolekcie dvoch alebo viacerých typov, typy priesečníkov nevyžadujú prítomnosť žiadneho z uvedených typov, ale všetkých špecifikovaných typov v množine, ktorá sa má vyplniť. function createSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Existuje nový typ „nikdy“, ktorý možno použiť na informovanie statických analyzátorov, že funkcia ukončí vykonávanie programu, napríklad vyvolaním výnimky alebo vykonaním funkcie ukončenia. function dd(zmiešaný $vstup): never { exit; }
  • Bola navrhnutá nová funkcia array_is_list, ktorá vám umožňuje určiť, že kľúče v poli sú usporiadané podľa rastúcich číselných hodnôt, počnúc od 0: $list = [“a”, “b”, “c”]; pole_je_zoznam($zoznam); // true $notAList = [1 => “a”, 2 => “b”, 3 => “c”]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // nepravda
  • Teraz môžete použiť kľúčové slovo "final", aby ste zabránili prepísaniu konštánt rodičovskej triedy. class Foo { final public const X = "foo"; } class Bar extends Foo { public const X = "bar"; > Závažná chyba: Bar::X nemôže prepísať konečnú konštantu Foo::X }
  • Funkcie fsync a fdatasync sú navrhnuté tak, aby vynútili uloženie zmien z vyrovnávacej pamäte disku. $subor = fopen("vzor.txt", "w"); fwrite($súbor, "Niektorý obsah"); if (fsync($súbor)) { echo "Súbor bol úspešne uložený na disk."; } fclose($subor);
  • Pridaná možnosť používať predpony „0o“ a „0O“ pre osmičkové čísla, okrem predtým používanej predpony „0“. 016 === 0o16; // pravda 016 === 0O16; // pravda
  • Navrhuje sa selektívne obmedzenie používania $GLOBALS, čo povedie k narušeniu spätnej kompatibility, ale umožní výrazne urýchliť operácie s poliami. Zvažuje sa napríklad možnosť zakázať zápis do $GLOBALS a odovzdať $GLOBALS ukazovateľom. Analýza 2000 23 balíkov ukázala, že len 8.1 z nich bude ovplyvnených touto zmenou. Napríklad, ak je návrh schválený, XNUMX už nebude podporovať výrazy ako: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
  • Interné metódy by teraz mali vrátiť správny typ. V PHP 8.1 vrátenie typu, ktorý sa nezhoduje s deklaráciou funkcie, spôsobí varovanie, ale v PHP 9.0 bude varovanie nahradené chybou.
  • Pokračovali práce na presune funkcií z používania zdrojov na manipuláciu s objektmi. Funkcie finfo_* a imap_* boli prenesené do objektov.
  • Odovzdávanie hodnôt null ako argumentov interným funkciám označeným bez možnosti null bolo zastarané. V PHP 8.1 povedie použitie konštrukcií ako str_contains("string", null) k varovaniu a v PHP 9 k chybe.
  • Pridaná podpora pre hashovacie algoritmy MurmurHash3 a xxHash.

Zdroj: opennet.ru

Pridať komentár