Започна алфа-тестироването на PHP 8.1

Представен е първият алфа-релиз на новата версия на езика за програмиране PHP 8.1. Релизът е насрочен за 25 ноември. Основните нововъведения, които вече са налични за тестване или планирани за реализиране в PHP 8.1:

  • Добавена е поддръжка на изброения, например, вече можете да използвате следните конструкции: 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);
  • Добавена е поддръжка на лекоимплементирани потоци, наречени фибри (Fiber), които позволяват управление на паралелизиране на ниско ниво. Поддръжката на фибри се планира да бъде добавена във фреймворците Amphp и ReactPHP. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend(‘след спирането’); // … }); $valueAfterSuspending = $fiber->start(); $fiber->resume(‘след възобновяване’);
  • Подобрена е реализацията на кеша на обектния код (opcache), в която е добавена възможност за кеширане на информация за наследяване на класове. Оптимизацията позволи увеличаване на производителността на някои приложения с 5-8%.
  • Операторът за разопаковане в масиви «…$var», който позволява подмяна на съществуващи масиви при дефиниране на нов масив, е разширен с поддръжка на стринг ключове (по-рано се поддържаха само цифрови идентификатори). Например, вече можете да използвате в кода: $array1 = [„a” => 1]; $array2 = [„b” => 2]; $array = [„a” => 0, …$array1, …$array2]; var_dump($array); // [„a” => 1, „b” => 2]
  • Появи се нов тип «never», който можете да използвате, за да информирате статичните анализатори, че функцията прекратява изпълнението на програмата, например, като извика изключение или извърши функция exit. function dd(mixed $input): never { exit; }
  • Предложена е нова функция array_is_list, която позволява да се определи, че ключовете в масива са подредени в нарастващ ред на числовите стойности, започвайки от 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
  • Предложена възможност за презаписване на константи в клас в процеса на наследяване. За да се забрани презаписването на константите на родителския клас, може да се използва ключовата дума „final“. class Foo { public const X = "foo"; final public const Z = "foo"; } class Bar extends Foo { public const X = "bar"; }
  • Предложени функции fsync и fdatasync за принудително запазване на промени от дисковия кеш. $file = fopen("sample.txt", "w"); fwrite($file, "Some content"); if (fsync($file)) { echo "File has been successfully persisted to disk."; } fclose($file);
  • Добавена е възможност за използване на префиксите „0o“ и „0O“ за осемични числа, освен вече използвания префикс „0“. 016 === 0o16; // true 016 === 0O16; // true
  • Предложено е изборно ограничаване на приложението на $GLOBALS, което ще доведе до нарушаване на обратно съвместимост, но ще позволи значително ускоряване на операциите с масиви. Например, разглежда се възможността за забрана на запис в $GLOBALS и предаване на $GLOBALS по указател. Анализът на 2000 пакета показа, че само 23 от тях ще бъдат засегнати от това изменение. Например, в случай на одобрение на предложението в 8.1, поддръжката на такива изрази като: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
  • Продължава работата по прехвърлянето на функции от използване на ресурси към манипулиране на обекти. Функциите finfo_* и imap_* са прехвърлени на обекти.
  • Обявено е за остарело подаването на null стойности като аргументи на вътрешни функции, обозначени като non-nullable. В PHP 8.1 използването на конструкции от вида str_contains("string", null) ще води до предупреждение, а в PHP 9 до грешка.
  • Добавена е поддръжка за хеширащи алгоритми MurmurHash3 и xxHash.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster