Vydání programovacího jazyka PHP 8.1

Po roce vývoje bylo představeno vydání programovacího jazyka PHP 8.1. Nová větev obsahuje řadu nových funkcí a také několik změn, které narušují kompatibilitu.

Klíčová vylepšení v PHP 8.1:

  • Byla přidána podpora pro výčty, například nyní můžete používat následující konstrukce: enum Status { case Pending; pouzdro Aktivní; případ Archivován; } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
  • Přidána podpora pro lehká vlákna zvaná fibers, která umožňují správu vláken na nízké úrovni. Podpora Fiber je plánována pro frameworky Amphp a ReactPHP. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('po pozastavení'); // … }); $valueAfterSuspending = $fiber->start(); $fiber->resume('po obnovení');
  • Улучшена реализация кэша объектного кода (opcache), в которой появилась возможность кэширования информации о наследовании классов. Оптимизация позволила поднять производительность некоторых приложений на 5-8%. Из других оптимизаций отмечается оптимизация работы JIT, реализация поддержки JIT для архитектуры ARM64 (AArch64), ускорение разрешения имён, оптимизация библиотек timelib и ext/date, повышение производительности сериализации и десериализации, оптимизация функция get_declared_classes(), explode(), strtr(), strnatcmp(), dechex(). В общем виде отмечается повышение производительности Symfony Demo на 23.0%, а WordPress na% 3.5.
  • Operátor rozbalování uvnitř polí "...$var", který umožňuje náhradu existujících polí při definování nového pole, byl rozšířen o podporu řetězcových klíčů (dříve byly podporovány pouze digitální identifikátory). Například nyní můžete v kódu použít: $array1 = [“a” => 1]; $array2 = ["b" => 2]; $array = [“a” => 0, …$array1, …$array2]; var_dump($array); // ["a" => 1, "b" => 2]
  • Klíčové slovo „new“ je povoleno v inicializátorech, například v definicích funkcí jako výchozí parametr nebo v atributech argumentů. class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {} }
  • Nyní je možné označit vlastnosti třídy pro přístup pouze pro čtení (informace v takových vlastnostech lze zapsat pouze jednou, poté nebudou k dispozici pro úpravy). class PostData { public function __construct( public readonly string $title, public readonly DateTimeImmutable $date, ) {} } $post = new Post('Title', /* … */); $post->title = 'Ostatní'; > Chyba: Nelze upravit vlastnost Post::$title, která je určena pouze pro čtení
  • Byla implementována nová syntaxe pro volatelné objekty - uzávěr lze nyní vytvořit voláním funkce a předáním jí hodnoty "..." jako argumentu (tj. myFunc(...) místo Closure::fromCallable('myFunc')): function foo(int $a, int $b) { /* ... */ } $foo = foo(...); $foo(a: 1, b: 2);
  • Byla přidána plná podpora pro typy průniků, která umožňuje vytvářet nové typy kombinací stávajících. Na rozdíl od typů sjednocení, které definují kolekce dvou nebo více typů, typy průniků vyžadují, aby v naplňované sadě byly přítomny všechny zadané typy, nikoli pouze kterýkoli z uvedených typů. function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Existuje nový typ „nikdy“, který lze použít k informování statických analyzátorů, že funkce ukončí provádění programu, například vyvoláním výjimky nebo provedením funkce ukončení. function dd(mix $input): never { exit; }
  • Byla navržena nová funkce array_is_list, která umožňuje určit, že klíče v poli jsou uspořádány v pořadí rostoucích číselných hodnot, počínaje 0: $list = [“a”, “b”, “c”]; pole_je_seznam($seznam); // true $notAList = [1 => “a”, 2 => “b”, 3 => “c”]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // Nepravdivé
  • Nyní můžete použít klíčové slovo „final“, abyste zabránili přepsání konstant nadřazené třídy. class Foo { final public const X = "foo"; } class Bar extends Foo { public const X = "bar"; > Fatální chyba: Bar::X nemůže přepsat konstantu final Foo::X }
  • Funkce fsync a fdatasync jsou navrženy k vynucení uložení změn z diskové mezipaměti. $soubor = fopen("sample.txt", "w"); fwrite($soubor, "Nějaký obsah"); if (fsync($soubor)) { echo "Soubor byl úspěšně uložen na disk."; } fclose($soubor);
  • Přidána možnost používat předpony „0o“ a „0O“ pro osmičková čísla, kromě dříve používané předpony „0“. 016 === 0o16; // pravda 016 === 0O16; // skutečný
  • Navrhuje se selektivně omezit používání $GLOBALS, což povede k narušení zpětné kompatibility, ale umožní výrazně zrychlit operace s poli. Zvažuje se například možnost zakázat zápis do $GLOBALS a předat $GLOBALS ukazatelem. Analýza 2000 balíčků ukázala, že pouze 23 z nich bude touto změnou ovlivněno. Pokud je například návrh schválen, verze 8.1 již nebude podporovat výrazy jako: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBÁLNÍ; unset($GLOBALS); by_ref($GLOBALS);
  • Interní metody nyní musí vracet správný typ. V PHP 8.1 by vrácení typu, který neodpovídá deklaraci funkce, vedlo k varování, ale v PHP 9.0 bude toto varování nahrazeno chybou.
  • Pokračovaly práce na přenosu funkcí z používání zdrojů na manipulaci s objekty. Funkce finfo_* a imap_* byly přeneseny do objektů.
  • Předávání hodnot null jako argumentů interním funkcím označeným bez možnosti null bylo zastaralé. V PHP 8.1 povede použití konstrukcí jako str_contains("string", null) k varování a v PHP 9 k chybě.
  • Přidána podpora pro hashovací algoritmy MurmurHash3 a xxHash.

Zdroj: opennet.ru

Kupte si spolehlivý hosting pro stránky s DDoS ochranou, VPS VDS servery 🔥 Kupte si spolehlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster