Почалося альфа-тестування PHP 8.2

Подано перший альфа-випуск нової гілки мови програмування PHP 8.2. Реліз заплановано на 24 листопада. Основні нововведення, вже доступні для тестування або плановані для реалізації в PHP 8.2:

  • Додані окремі типи «false» та «null», які можуть використовуватись, наприклад, для повернення функцією ознаки завершення з помилкою або порожнього значення. Раніше false і null могли використовуватися тільки у зв'язці з іншими типами (наприклад, string false), а тепер можуть застосовуватися окремо: function always False (): false {return false; }
  • Додана можливість позначки класу доступною лише для читання. Властивості в подібних класах можуть бути задані лише один раз, після чого не будуть доступні зміни. Раніше тільки для читання могли позначатися окремі властивості класу, а тепер можна включити цей режим для всіх властивостей класу. Вказівка ​​прапора "readonly" на рівні класу також блокує динамічне додавання властивостей до класу. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'wrong'; // Error: Cannot create dynamic property 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'); Error 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}"; Deprecated: Using ${} in strings is deprecated
  • Оголошені застарілими частково підтримувані об'єкти (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 як при виставленні локалі «С».

Джерело: opennet.ru

Додати коментар або відгук