Започна алфа тестването на PHP 8.2

Представена е първата алфа версия на новия клон на езика за програмиране PHP 8.2. Премиерата е насрочена за 24 ноември. Основните иновации, които вече са налични за тестване или са планирани за внедряване в PHP 8.2:

  • Добавени са отделни типове "false" и "null", които могат да се използват например за връщане на знак за завършеност с грешка или празна стойност от функция. Преди "false" и "null" можеха да се използват само заедно с други типове (например "string|false"), но сега могат да се използват отделно: function alwaysFalse(): false { return false; }
  • Добавена е възможност за маркиране на клас като само за четене. Свойствата в такива класове могат да бъдат зададени само веднъж, след което няма да бъдат достъпни за промяна. Преди това свойствата на отделните класове можеха да бъдат маркирани само за четене, но сега можете да включите този режим за всички свойства на класа наведнъж. Указването на флага "само за четене" на ниво клас също блокира динамичното добавяне на свойства към класа. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'грешно'; // Грешка: Не може да се създаде динамично свойство Post::$unknown
  • Възможността за динамично създаване на свойства в клас е отхвърлена (като "post->unknown" в примера по-горе). В PHP 9.0 достъпът до свойства, които не са първоначално дефинирани в класа, ще доведе до грешка (ErrorException). Класове, които предоставят __get и __set методи за създаване на свойства или динамични свойства в stdClass ще продължат да работят непроменени, само имплицитната работа с несъществуващи свойства ще бъде спряна, за да се защити разработчикът от скрити грешки. За да запазите работата на стария код, се предлага атрибутът "#[AllowDynamicProperties]", който позволява използването на динамични свойства.
  • Осигурена възможност за филтриране на чувствителни настройки в изхода за проследяване на стека по време на грешка. Изрязването на определена информация може да се наложи, когато информацията за възникнали грешки се изпраща автоматично до услуги на трети страни, които проследяват проблемите и информират разработчиците за тях. Например, можете да изключите параметри от проследяването, които включват потребителски имена, пароли и променливи на средата. тест на функцията ($foo, #[\SensitiveParameter] $password, $baz) { хвърля ново изключение ('Грешка'); } test('foo', 'password', 'baz'); Фатална грешка: Неуловено изключение: Грешка в test.php:8 Проследяване на стека: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} хвърлен в test.php онлайн 8
  • Възможността за заместване на стойности на променливи в низове с помощта на изрази "${var}" и ${(var)}" е отхвърлена. Поддръжката за често използвани замествания "{$var}" и "$var" е запазена. Например: „Здравей {$world}“; OK "Здравей $world"; OK "Здравейте ${world}"; Отхвърлено: Използването на ${} в низове е отхвърлено
  • Частично поддържаните callables, които могат да бъдат извикани чрез "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

Добавяне на нов коментар