Rozpoczęto testy alfa PHP 8.1

Zaprezentowano pierwsze wydanie alfa nowej gałęzi języka programowania PHP 8.1. Premiera stabilnej wersji zaplanowana jest na 25 listopada. Najważniejsze nowości, które są już dostępne do testów lub planowane do wdrożenia w PHP 8.1:

  • Dodano obsługę wyliczeń (enum), dzięki czemu można teraz używać następujących konstrukcji: 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);
  • Dodano obsługę lekkich wątków, nazywanych fiberami (Fiber), które umożliwiają zarządzanie współbieżnością na niskim poziomie. Obsługa fiberów ma zostać dodana do frameworków Amphp i ReactPHP. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend(‘after suspending’); // … }); $valueAfterSuspending = $fiber->start(); $fiber->resume(‘after resuming’);
  • Ulepszono implementację pamięci podręcznej kodu obiektowego (opcache), w której pojawiła się możliwość buforowania informacji o dziedziczeniu klas. Ta optymalizacja pozwoliła zwiększyć wydajność niektórych aplikacji o 5–8%.
  • Operator rozpakowywania wewnątrz tablic „…$var”, który pozwala wstawiać istniejące tablice podczas definiowania nowej tablicy, został rozszerzony o obsługę kluczy tekstowych (wcześniej obsługiwane były tylko identyfikatory liczbowe). Na przykład teraz można użyć w kodzie: $array1 = [„a” => 1]; $array2 = [„b” => 2]; $array = [„a” => 0, …$array1, …$array2]; var_dump($array); // [„a” => 1, „b” => 2]
  • Pojawił się nowy typ „never”, którego można używać do informowania analizatorów statycznych, że funkcja przerywa wykonanie programu, na przykład przez zgłoszenie wyjątku lub wywołanie funkcji exit. function dd(mixed $input): never { exit; }
  • Zaproponowano nową funkcję array_is_list, która pozwala określić, czy klucze w tablicy są ułożone w rosnącej kolejności wartości liczbowych, zaczynając od 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
  • Wprowadzono możliwość przesłaniania stałych klasowych podczas dziedziczenia. Aby zabronić przesłaniania stałych klasy nadrzędnej, można użyć słowa kluczowego «final». class Foo { public const X = «foo»; final public const Z = «foo»; } class Bar extends Foo { public const X = «bar»; }
  • Udostępniono funkcje fsync i fdatasync do wymuszonego zapisu zmian z pamięci podręcznej dysku. $file = fopen(«sample.txt», «w»); fwrite($file, «Some content»); if (fsync($file)) { echo «File has been successfully persisted to disk.»; } fclose($file);
  • Dodano możliwość używania prefiksów «0o» i «0O» dla liczb ósemkowych, oprócz wcześniej stosowanego prefiksu «0». 016 === 0o16; // true 016 === 0O16; // true
  • Zaproponowano selektywne ograniczenie użycia $GLOBALS, co spowoduje naruszenie wstecznej kompatybilności, ale pozwoli znacząco przyspieszyć operacje na tablicach. Na przykład rozważana jest możliwość zakazu zapisu do $GLOBALS oraz przekazywania $GLOBALS przez referencję. Analiza 2000 pakietów wykazała, że zmiana ta wpłynie tylko na 23 z nich. Na przykład w przypadku zaakceptowania propozycji w 8.1 zostanie zakończona obsługa takich wyrażeń jak: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
  • Kontynuowano prace nad przejściem funkcji z użycia zasobów na operowanie obiektami. Funkcje finfo_* i imap_* zostały przeniesione na obiekty.
  • Za przestarzałe uznano przekazywanie wartości null jako argumentów do funkcji wewnętrznych oznaczonych jako non-nullable. W PHP 8.1 użycie konstrukcji takich jak str_contains(«string», null) będzie powodować ostrzeżenie, a w PHP 9 błąd.
  • Dodano obsługę algorytmów haszowania MurmurHash3 i xxHash.

Źródło: opennet.ru

Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS - ProHoster