Rozpoczęły się testy alfa PHP 8.2

Zaprezentowano pierwszą wersję alfa nowej gałęzi języka programowania PHP 8.2. Premiera zaplanowana jest na 24 listopada. Główne innowacje już dostępne do testowania lub planowane do wdrożenia w PHP 8.2:

  • Dodano osobne typy "false" i "null", które mogą służyć np. do zwrócenia przez funkcję znaku zakończenia z błędem lub pustej wartości. Wcześniej „false” i „null” można było używać tylko w połączeniu z innymi typami (na przykład „string|false”), ale teraz można ich używać oddzielnie: function alwaysFalse(): false { return false; }
  • Dodano możliwość oznaczenia klasy jako tylko do odczytu. Właściwości w takich klasach można ustawić tylko raz, po czym nie będą one dostępne do zmiany. Wcześniej poszczególne właściwości klas można było oznaczyć jako tylko do odczytu, ale teraz można włączyć ten tryb jednocześnie dla wszystkich właściwości klas. Określenie flagi „tylko do odczytu” na poziomie klasy blokuje również dynamiczne dodawanie właściwości do klasy. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->nieznany = 'źle'; // Błąd: Nie można utworzyć właściwości dynamicznej Post::$unknown
  • Możliwość dynamicznego tworzenia właściwości w klasie została wycofana (jak „post->unknown” w powyższym przykładzie). W PHP 9.0 dostęp do właściwości, które nie zostały pierwotnie zdefiniowane w klasie, spowoduje błąd (ErrorException). Klasy, które zapewniają metody __get i __set do tworzenia właściwości lub właściwości dynamiczne w stdClass będą nadal działać bez zmian, tylko niejawna praca z nieistniejącymi właściwościami zostanie zatrzymana w celu ochrony programisty przed ukrytymi błędami. Aby stary kod działał, zaproponowano atrybut „#[AllowDynamicProperties]”, umożliwiający korzystanie z właściwości dynamicznych.
  • Zapewniono możliwość filtrowania wrażliwych ustawień w danych wyjściowych śledzenia stosu w momencie wystąpienia błędu. Wycięcie niektórych informacji może być konieczne, gdy informacje o występujących błędach są automatycznie wysyłane do usług stron trzecich, które śledzą problemy i informują o nich programistów. Na przykład można wykluczyć ze śledzenia parametry, które obejmują nazwy użytkowników, hasła i zmienne środowiskowe. test funkcji( $foo, #[\SensitiveParameter] $hasło, $baz ) { wyrzuć nowy wyjątek('Błąd'); } test('foo', 'hasło', 'baz'); Błąd krytyczny: nieprzechwycony wyjątek: błąd w pliku test.php:8 Ślad stosu: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} rzucony w test.php w linii 8
  • Możliwość zastępowania wartości zmiennych ciągami znaków za pomocą wyrażeń „${var}” i ${(var)}” została wycofana. Zachowano obsługę często używanych podstawień „{$var}” i „$var”. Na przykład: „Witaj {$świecie}”; OK „Witaj $świecie”; OK "Witaj ${świecie}"; Przestarzałe: używanie ${} w łańcuchach jest przestarzałe
  • Przestarzałe, częściowo obsługiwane wywołania, które można wywoływać przez „call_user_func($callable)”, ale nie obsługują wywoływania w postaci „$callable()”: „self::method” „parent::method” „static::method” [„self”, „method”] [„parent”, „method”] [„static”, „method”] [„Foo”, „Bar::method”] [new Foo, „Bar :: metoda"]
  • Zaimplementowano niezależną od ustawień regionalnych konwersję wielkości liter. Funkcje takie jak strtolower() i strtoupper() teraz zawsze konwertują wielkość liter w zakresie ASCII, tak jak podczas ustawiania ustawień regionalnych na „C”.

Źródło: opennet.ru

Dodaj komentarz