PHP 8.2 альфа тестирлөө башталды

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

  • Добавлены отдельные типы «false» и «null», которые могут использоваться, например, для возвращения функцией признака завершения с ошибкой или пустого значения. Ранее «false» и «null» могли использоваться только в связке с другими типами (например, «string|false»), а теперь могут применяться отдельно: function alwaysFalse(): false { return false; }
  • Классты окуу үчүн гана деп белгилөө мүмкүнчүлүгү кошулду. Мындай класстардагы касиеттерди бир гана жолу коюуга болот, андан кийин аларды өзгөртүүгө болбойт. Мурда класстын жеке касиеттери окуу үчүн гана белгилениши мүмкүн, бирок азыр сиз бул режимди бир эле учурда бардык класс касиеттери үчүн иштете аласыз. Класс деңгээлинде "окуу үчүн гана" желекчесин көрсөтүү касиеттердин класска динамикалык түрдө кошулушун бөгөттөйт. окуу үчүн гана класс Пост { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'туура эмес'; // Ката: Динамикалык касиетти түзүү мүмкүн эмес Post::$белгисиз
  • Объявлена устаревшей возможность динамического создания свойств в классе (как «post->unknown» в примере выше). В PHP 9.0 обращение к свойствам, изначально не определённым в классе, будет приводить к ошибке (ErrorException). Классы, предоставляющие методы __get и __set для создания свойств, или динамические свойства в stdClass продолжат работать без изменений, прекратится поддержка только неявной работы с несуществующими свойствами для того чтобы защитить разработчика от скрытых ошибок. Для сохранения работы старого кода предложен атрибут «#[AllowDynamicProperties]», разрешающий использование динамических свойств.
  • Ката учурунда стек из чыгаруусунда сезимтал параметрлерди чыпкалоо мүмкүнчүлүгүн берет. Качан гана пайда болгон каталар тууралуу маалымат үчүнчү тараптын кызматтарына автоматтык түрдө жөнөтүлүп, көйгөйлөргө көз салып, иштеп чыгуучуларга алар тууралуу маалымат бергенде, кээ бир маалыматты өчүрүү зарыл болушу мүмкүн. Мисалы, колдонуучу аттары, сырсөздөр жана чөйрө өзгөрмөлөрү камтылган параметрлерди байкоодон чыгарсаңыз болот. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'parol', 'baz'); Өчүрүүчү ката: Кармалбаган өзгөчөлүк: test.phpдеги ката:8 Стек изи: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} test.phpге ыргытылды 8-сапта
  • "${var}" жана ${(var)} туюнтмаларын колдонуу менен өзгөрмө маанилерин саптарга алмаштыруу мүмкүнчүлүгү жокко чыгарылган. Көбүнчө колдонулган "{$var}" жана "$var" алмаштырууларды колдоо сакталды. Мисалы: "Hello {$world}"; OK "Hello $world"; OK "Салам ${world}"; Эскирген: Саптарда ${} колдонуу эскирген
  • "call_user_func($callable)" аркылуу чалууга мүмкүн болгон, бирок "$callable()": "self::method" "parent::method" "static" ::method түрүндө чалууну колдобой турган эскирген жарым-жартылай колдоого алынган чалуулар " ["self", "metod"] ["ата-эне", "метод"] ["статикалык", "метод"] ["Foo", "Bar::method"] [жаңы Foo, "Bar: :method" ]
  • Жергиликтүү тилден көз карандысыз регистрге конверсия ишке ашырылды. strtolower() жана strtoupper() сыяктуу функциялар азыр ар дайым ASCII диапазонундагы символдордун регистрлерин "С" локализациясына коюлгандай айлантат.

Source: opennet.ru

Комментарий кошуу