เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Alpha เบ‚เบญเบ‡ PHP 8.2 เป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเป‰เบง

เบเบฒเบ™เบ›เปˆเบญเบ alpha เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบชเบฒเบ‚เบฒเปƒเบซเบกเปˆเบ‚เบญเบ‡เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบก 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, เบˆเบฐเบชเบทเบšเบ•เปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡, เบžเบฝเบ‡เปเบ•เปˆเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ implicit เบเบฑเบšเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบšเปเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป€เบžเบทเปˆเบญเบ›เบปเบเบ›เป‰เบญเบ‡เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบˆเบฒเบเปเบกเบ‡เป„เบกเป‰เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ‡เป„เบงเป‰. เป€เบžเบทเปˆเบญเบฎเบฑเบเบชเบฒเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เป€เบเบปเปˆเบฒ, เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ "#[AllowDynamicProperties]" เบ–เบทเบเบชเบฐเป€เบซเบ™เบต, เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ™เปเบฒเปƒเบŠเป‰เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง.
  • เปƒเบซเป‰เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเบฅเบฐเบญเบฝเบ”เบญเปˆเบญเบ™เปƒเบ™เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™ stack trace เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป€เบเบตเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”. เบเบฒเบ™เบ•เบฑเบ”เบ‚เปเป‰เบกเบนเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบญเบฒเบ”เบˆเบฐเบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบกเบทเปˆเบญเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป„เบ›เบซเบฒเบšเปเบฅเบดเบเบฒเบ™เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบกเบ—เบตเปˆเบ•เบดเบ”เบ•เบฒเบกเบšเบฑเบ™เบซเบฒเปเบฅเบฐเปเบˆเป‰เบ‡เปƒเบซเป‰เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบเปˆเบฝเบงเบเบฑเบšเบžเบงเบเบกเบฑเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบปเบเป€เบงเบฑเป‰เบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเบ›เบฐเบเบญเบšเบกเบตเบŠเบทเปˆเบœเบนเป‰เปƒเบŠเป‰, เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™, เปเบฅเบฐเบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบˆเบฒเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก. function test($foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™', 'baz'); เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบฎเป‰เบฒเบเปเบฎเบ‡: เบšเปเปˆเป„เบ”เป‰เบˆเบฑเบšเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™: เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™ test.php:8 เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เบ•เบดเบ”เบเบฑเบ™: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} thrown in test.php เปƒเบ™โ€‹เป€เบชเบฑเป‰เบ™ 8
  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบ„เปˆเบฒเบ•เบปเบงเปเบ›เป€เบ›เบฑเบ™เบชเบฐเบ•เบฃเบดเบ‡เป‚เบ”เบเปƒเบŠเป‰เบชเบณเบ™เบงเบ™ "${var}" เปเบฅเบฐ ${(var)} เป„เบ”เป‰เบ–เบทเบเบเบปเบเป€เบฅเบตเบ. เบเบฒเบ™เบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™ "{$var}" เปเบฅเบฐ "$var" เบ—เบตเปˆเปƒเบŠเป‰เบ—เบปเปˆเบงเป„เบ›เบ–เบทเบเบฎเบฑเบเบชเบฒเป„เบงเป‰. เบ•เบปเบงเบขเปˆเบฒเบ‡: "เบชเบฐเบšเบฒเบเบ”เบต {$world}"; เบ•เบปเบเบฅเบปเบ‡ "เบชเบฐเบšเบฒเบเบ”เบต $world"; เบ•เบปเบเบฅเบปเบ‡ "เบชเบฐเบšเบฒเบเบ”เบต ${world}"; เป€เบŠเบปเบฒเบฎเบญเบ‡เบฎเบฑเบš: เบเบฒเบ™เปƒเบŠเป‰ ${} เปƒเบ™เบชเบฐเบ•เบฃเบดเบ‡เบ–เบทเบเบ›เบฐเบ•เบดเป€เบชเบ”
  • เป€เบŠเบปเบฒเบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เป‚เบ—เบ—เบตเปˆเบฎเบญเบ‡เบฎเบฑเบšเบšเบฒเบ‡เบชเปˆเบงเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป‚เบ—เบœเปˆเบฒเบ™ "call_user_func($callable)" เปเบ•เปˆเบšเปเปˆเบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เป‚เบ—เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ "$callable()": "self::method" "parent::method" "static" ::method ["เบ•เบปเบ™เป€เบญเบ‡", "เบงเบดเบ—เบตเบเบฒเบ™"] ["เบžเปเปˆเปเบกเปˆ", "เบงเบดเบ—เบตเบเบฒเบ™"] ["static", "เบงเบดเบ—เบตเบเบฒเบ™"] ["Foo", "Bar::เบงเบดเบ—เบตเบเบฒเบ™"] [Foo เปƒเบซเบกเปˆ, "Bar: :เบงเบดเบ—เบตเบเบฒเบ™" ]
  • เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ›เปˆเบฝเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบšเปเปˆเบ‚เบถเป‰เบ™เบเบฑเบšเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™. เบŸเบฑเบ‡เบŠเบฑเบ™เบ•เปˆเบฒเบ‡เป†เป€เบŠเบฑเปˆเบ™ strtolower() เปเบฅเบฐ strtoupper() เบ”เบฝเบงเบ™เบตเป‰เบ›เปˆเบฝเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เปƒเบ™เบŠเปˆเบงเบ‡ ASCII เบ„เบทเบเบฑเบšเบงเปˆเบฒเบ•เบฑเป‰เบ‡เป€เบ›เบฑเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™ "C".

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™