Wydanie języka programowania PHP 8.3

Po roku prac zaprezentowano wydanie języka programowania PHP 8.3. Nowa gałąź zawiera szereg nowych funkcji, a także kilka zmian psujących kompatybilność.

Kluczowe zmiany w PHP 8.3:

  • Podczas klonowania klas możliwe jest ponowne zainicjowanie właściwości za pomocą atrybutu „tylko do odczytu”. Zastępowanie właściwości tylko do odczytu jest dozwolone tylko wewnątrz funkcji „__clone”: readonly class Post { funkcja publiczna __construct( public DateTime $createdAt, ) {} funkcja publiczna __clone() { $this->createdAt = new DateTime(); // dozwolone, mimo że właściwość „createdAt” jest tylko do odczytu. } }
  • Dodano możliwość wykorzystania stałych ze wskazaniem typu w klasach, cechach i wyliczeniach: class Foo { const string BAR = 'baz'; }
  • Dodano obsługę atrybutu „#[Override]”, za pomocą którego programista może poinformować interpreter, że zaznaczona metoda zastępuje jakąś metodę nadrzędną. Jeśli nie ma zastąpienia, interpreter wyświetli błąd.
  • Zmieniono obsługę wartości ujemnych jako indeksu tablicy. Przykładowo dodając element o numerze „-5” do pustej tablicy i dodając kolejny element, poprzednio drugi element był zapisywany z indeksem „0”, ale od wersji PHP 8.3 będzie zapisywany z indeksem „-4” . $tablica = []; $tablica[-5] = 'a'; $tablica[] = 'b'; var_export($tablica); // Była tablicą (-5 => „a”, 0 => „b”) // Stała się tablicą (-5 => „a”, -4 => „b”)
  • Dodano możliwość tworzenia anonimowych klas w trybie tylko do odczytu: $class = nowa klasa tylko do odczytu { funkcja publiczna __construct( public string $foo = 'bar', ) {} };
  • Dodano funkcję json_validate(), aby szybko sprawdzić, czy ciąg znaków jest w formacie JSON, bez wykonywania operacji dekodowania. json_validate(string $json, int $głębokość = 512, int $flagi = 0): bool
  • Do klasy Randomizer, która udostępnia API wysokiego poziomu umożliwiające generowanie liczb i sekwencji pseudolosowych, dodano nowe metody: getBytesFromString do generowania ciągu o zadanej wielkości, wykorzystując w losowej kolejności znaki występujące w innym ciągu; getFloat i nextFloat, aby wygenerować losową liczbę zmiennoprzecinkową mieszczącą się w określonym zakresie.
  • Dodano możliwość pobierania stałych przy użyciu dynamicznej składni klasy: class Foo { const BAR = 'bar'; } $nazwa = 'BAR'; // Poprzednio, aby pobrać stałą BAR, trzeba było wywołać stałą(Foo::class . '::' . $name); // Teraz po prostu określ Foo::{$name};
  • Dodano generowanie indywidualnych wyjątków (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) w przypadku problemów pojawiających się podczas operacji operujących na datach i godzinach.
  • Poprawiona obsługa błędów występujących podczas analizowania serializowanych danych w funkcji unserialize(). W przypadku problemów funkcja unserialize() generuje teraz E_WARNING zamiast E_NOTICE.
  • Wprowadzono zmiany w funkcji range(). Wyjątek generowany jest przy próbie przekazania obiektów, zasobów lub tablic w zmiennych definiujących granice zakresów, a także przy podaniu wartości ujemnej w parametrze $step lub niezdefiniowanej wartości w dowolnym parametrze. Podczas określania ciągów znaków zamiast liczb można teraz wyprowadzić listę znaków (na przykład „zakres('5', 'z')").
  • Zmieniono zachowanie cech o właściwościach statycznych, które teraz zastępują właściwości statyczne odziedziczone z klasy nadrzędnej.
  • Dodano ustawienia ochrony przed przepełnieniem stosu. Do pliku ini dodano dyrektywy zend.max_allowed_stack_size i zend.reserved_stack_size, definiujące maksymalny dozwolony i zarezerwowany rozmiar stosu. Program ulegnie awarii, gdy zbliża się do wyczerpania stosu, gdy stos jest zapełniony bardziej niż różnica między zend.max_allowed_stack_size i zend.reserved_stack_size (wykonanie zostanie zatrzymane, zanim wystąpi błąd segmentacji). Domyślnie wartość zend.max_allowed_stack_size jest ustawiona na 0 (0 — rozmiar jest ustalany automatycznie; aby wyłączyć ograniczenie, możesz ustawić go na -1).
  • Dodano nowe funkcje POSIX posix_sysconf(), posix_pathconf(), posix_fpathconf() i posix_eaccess().
  • Dodano funkcję mb_str_pad, która jest odpowiednikiem funkcji string str_pad(), zaprojektowaną do pracy z kodowaniem wielobajtowym, takim jak UTF-8.
  • Umożliwia tworzenie zamknięć z metod i przekazywanie nazwanych argumentów do tych zamknięć. $test = nowy test(); $zamknięcie = $test->magia(…); $zamknięcie(a: „cześć”, b: „świat”);
  • Zmieniono zachowanie podczas obsługi widoczności stałych w interfejsach. interfejs I { public const FOO = 'foo'; } klasa C implementuje I { private const FOO = 'foo'; }
  • Rozszerzono możliwości funkcji array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() i proc_get_status().
  • Możliwość przekazywania ujemnej wartości $widths do mb_strimwidth() jest przestarzała. Stała NumberFormatter::TYPE_CURRENCY została usunięta. Wycofano obsługę wywoływania funkcji ldap_connect() z dwoma parametrami $host i $port. Ustawienie opcache.consistency_checks zostało usunięte.

Źródło: opennet.ru

Dodaj komentarz