ΠΠ°Ρ‡Π°Π»ΠΎΡΡŒ Π°Π»ΡŒΡ„Π°-тСстированиС 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’); Fatal 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

author avatar
ProHoster ΠšΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚, ВСхничСский спСциалист
A technical specialist at ProHoster with over six years of experience in server administration, VPN solutions, and network security. I manage infrastructure setup and support, monitor service stability, and implement solutions to protect client data. I also contribute to performance optimization and compliance with modern security and privacy requirements.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ