Представен първият alpha-релиз на новата версия на програмния език PHP 8.2. Пускането е планирано за 24 ноември. Основните нововъведения, които вече са достъпни за тестване или планирано за реализиране в PHP 8.2:
- Добавени са отделни типове «false» и «null», които могат да се използват, например, за връщане на индикатор за завършване с грешка или празна стойност. Преди «false» и «null» можеха да се използват само в комбинация с други типове (например, «string|false»), а сега могат да се прилагат самостоятелно: function alwaysFalse(): false { return false; }
- Добавена е възможност за маркиране на клас като достъпен само за четене. Свойствата в такива класове могат да бъдат зададени само веднъж, след което няма да бъдат достъпни за промяна. Преди само отделни свойства на класа можеха да бъдат маркирани като само за четене, а сега е възможно да се включи този режим за всички свойства на класа. Указването на флага «readonly» на ниво клас също блокира динамичното добавяне на свойства в класа. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = ‘wrong’; // Грешка: Не може да се създаде динамично свойство Post::$unknown
- Обявена е за остаряла възможността за динамично създаване на свойства в класа (както «post->unknown» в примера по-горе). В PHP 9.0 достъпът до свойства, първоначално недефинирани в класа, ще води до грешка (ErrorException). Класовете, предоставящи методи __get и __set за създаване на свойства, или динамичните свойства в stdClass ще продължат да работят без промяна, спирането на поддръжката ще важи само за неявната работа с несъществуващи свойства, за да се предпази разработчика от скрити грешки. За запазване на работата на стария код е предложен атрибут «#[AllowDynamicProperties]», който разрешава използването на динамични свойства.
- Възможността за филтриране на конфиденциални параметри в стековите трасировки, изведени по време на грешка, е предоставена. Изрязването на определена информация може да е необходимо, когато данните за възникналите грешки автоматично се изпращат към външни услуги, които проследяват проблемите и информират разработчиците за тях. Например, е възможно да се изключат от трасировката параметри, включващи потребителски имена, пароли и променливи на средата. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception(‘Error’); } test(‘foo’, ‘password’, ‘baz’); Fatal error: Uncaught Exception: Error in test.php:8 Stack trace: #0 test.php(11): test(‘foo’, Object(SensitiveParameterValue), ‘baz’) #1 {main} thrown in test.php on line 8
- Обявена за остаряла възможността за заменяне на стойности на променливи в низове чрез изрази «${var}» и ${(var)}». Поддръжката на обикновено използваните замествания «{$var}» и «$var» остава. Например: «Hello {$world}»; OK «Hello $world»; OK «Hello ${world}»; Остарало: Използването на ${} в низове е остарялo
- Обявени за остарели частично поддържани извиквани обекти (callable), които могат да бъдат извиквани чрез «call_user_func($callable)», но не поддържат извикване в формата «$callable()»: «self::method» «parent::method» «static::method» [«self», «method»] [«parent», «method»] [«static», «method»] [«Foo», «Bar::method»] [new Foo, «Bar::method»]
- Реализирано е независимо от локализацията преобразуване на регистър на символи. Функции, подобни на strtolower() и strtoupper(), сега винаги преобразуват регистъра на символите в диапазона ASCII, както при задаване на локализация „C“.
Източник: opennet.ru
