Została zaprezentowana pierwsza wersja alfa nowej gałęzi języka programowania PHP 8.2. Premiera zaplanowana jest na 24 listopada. Główne nowości, które są już dostępne do testowania lub planowane do wdrożenia w PHP 8.2:
- Dodane zostały oddzielne typy „false” i „null”, które mogą być używane, na przykład, do zwracania przez funkcję wskaźnika zakończenia z błędem lub pustej wartości. Wcześniej „false” i „null” mogły być używane tylko w połączeniu z innymi typami (na przykład „string|false”), a teraz mogą być stosowane osobno: function alwaysFalse(): false { return false; }
- Dodano możliwość oznaczania klasy jako dostępnej tylko do odczytu. Właściwości w takich klasach mogą być ustawiane tylko raz, po czym nie będą dostępne do zmiany. Wcześniej tylko do odczytu mogły być oznaczane poszczególne właściwości klasy, a teraz można włączyć ten tryb dla wszystkich właściwości klasy jednocześnie. Ustawienie flagi „readonly” na poziomie klasy również blokuje dynamiczne dodawanie właściwości do klasy. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = ‘wrong’; // Błąd: Nie można utworzyć dynamicznej właściwości Post::$unknown
- Ogłoszono przestarzałą możliwość dynamicznego tworzenia właściwości w klasie (jak „post->unknown” w powyższym przykładzie). W PHP 9.0 odwołania do właściwości, które nie są pierwotnie zdefiniowane w klasie, będą prowadzić do błędu (ErrorException). Klasy, które udostępniają metody __get i __set do tworzenia właściwości, lub dynamiczne właściwości w stdClass będą działać bez zmian, zostanie wstrzymane wsparcie tylko dla niejawnej pracy z nieistniejącymi właściwościami, aby chronić programistę przed ukrytymi błędami. Aby zachować działanie starego kodu, zaproponowano atrybut „#[AllowDynamicProperties]”, który zezwala na użycie dynamicznych właściwości.
- Wprowadzono możliwość filtrowania poufnych parametrów w danych stosu śladowego wyświetlanych podczas błędu. Wykluczanie określonych informacji może być wymagane, gdy szczegóły występujących błędów są automatycznie przesyłane do zewnętrznych usług, które śledzą problemy i informują o nich programistów. Na przykład, można wykluczyć z śladu parametry zawierające nazwy użytkowników, hasła i zmienne środowiskowe. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception(‘Błąd’); } test(‘foo’, ‘password’, ‘baz’); Fatal error: Uncaught Exception: Błąd w test.php:8 Ślad stosu: #0 test.php(11): test(‘foo’, Object(SensitiveParameterValue), ‘baz’) #1 {main} wyrzucone w test.php w linii 8
- Ogłoszono, że możliwość podstawiania wartości zmiennych do łańcuchów za pomocą wyrażeń «${var}» i ${(var)}» jest przestarzała. Wsparcie dla często używanych podstawień «{$var}» i «$var» zostało zachowane. Na przykład: «Hello {$world}»; OK «Hello $world»; OK «Hello ${world}»; Przestarzałe: Używanie ${} w łańcuchach jest przestarzałe
- Ogłoszono, że częściowo obsługiwane obiekty wywoływalne (callable), które można wywołać przez «call_user_func($callable)», ale nie obsługują wywołania w formie «$callable()»: «self::method» «parent::method» «static::method» [«self», «method»] [«parent», «method»] [«static», «method»] [«Foo», «Bar::method»] [new Foo, «Bar::method»]
- Wdrążono niezależną od lokalizacji konwersję wielkości liter. Funkcje, takie jak strtolower() i strtoupper(), teraz zawsze przekształcają wielkość liter w zakresie ASCII tak, jak przy ustawieniu lokalizacji «C».
Źródło: opennet.ru
