Започна алфа-тестиране на 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