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

Прадстаўлены першы альфа-выпуск новай галіны мовы праграмавання 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'; // 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

Дадаць каментар