Π Π΅Π»ΠΈΠ· Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ PHP 8.5

Π‘Π»Π΅Π΄ Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ бСшС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π° вСрсия 8.5 Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ PHP. Новата вСрсия Π²ΠΊΠ»ΡŽΡ‡Π²Π° сСрия ΠΎΡ‚ Π½ΠΎΠ²ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ няколко ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π²Π°Ρ‚ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚Ρ‚Π°.

ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² PHP 8.5 (1, 2, 3):

  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Β«|>Β» (pipe), ΠΊΠΎΠΉΡ‚ΠΎ позволява ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° стойности ΠΎΡ‚ Π΅Π΄Π½Π° функция Π½Π° Π΄Ρ€ΡƒΠ³Π° Π±Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈ назначСния ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΅Π΄Π½Π° функция ΠΊΠ°Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π½Π° Π΄Ρ€ΡƒΠ³Π°. Ако функцията ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ΡŠΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° стойност сС ΠΈΠ·Π±ΠΈΡ€Π° Ρ‡Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ «…», Π° Π°ΠΊΠΎ функцията ΠΈΠΌΠ° няколко Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, подмяната сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° затваряния. НапримСр, слСдният ΠΊΠΎΠ΄ $output = $input |> trim(…) |> fn (string $string) => str_replace(β€˜ β€˜, β€˜-β€˜, $string) |> fn (string $string) => str_replace([β€˜.’, β€˜/’, β€˜β€¦β€™], β€˜β€™, $string) |> strtolower(…); Π΅ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π΅Π½ Π½Π° $temp = trim($input); $temp = str_replace(β€˜ β€˜, β€˜-β€˜, $temp); $temp = str_replace([β€˜.’, β€˜/’, β€˜β€¦β€™], β€˜β€™, $temp); $output = strtolower($temp); ΠΈΠ»ΠΈ $output = strtolower( str_replace([β€˜.’, β€˜/’, β€˜β€¦β€™], β€˜β€™, str_replace(β€˜ β€˜, β€˜-β€˜, trim($input) ) ) );
  • ΠžΡΠΈΠ³ΡƒΡ€Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° присвояванС Π½Π° Π½ΠΎΠ²ΠΈ стойности Π½Π° ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ, Ρ‡Ρ€Π΅Π· ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° асоциативСн масив Π² функцията clone(). public function withTitle(string $title): self { return clone($this, [ β€˜title’ => $title, ]); }
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΡŠΡ‚ Β«#[NoDiscard]Β», ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡ΠΈΠΈΡ‚ΠΎ Π²Ρ€ΡŠΡ‰Π°Π½ΠΈ стойности Π²ΠΈΠ½Π°Π³ΠΈ трябва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚. Ако Π²ΡŠΡ€Π½Π°Ρ‚Π°Ρ‚Π° стойност ΠΎΡ‚ Ρ‚Π°ΠΊΠ°Π²Π° функция бъдС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Π½Π°, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Ρ‰Π΅ ΠΈΠ·Π²Π΅Π΄Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. Π—Π° Π΄Π° сС Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π°, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ с ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ към Ρ‚ΠΈΠΏ void. #[NoDiscard(Β«must use this return value.Β»)] function foo(): string { return β€˜hi’; } foo(); // ΠΈΠ·Ρ…ΠΎΠ΄ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ (void) foo(); // ОК $string = foo(); // ОК
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° замикания (closures) ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π΅ΠΌΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ ΠΎΡ‚ ΠΏΡŠΡ€Π²ΠΈ клас (first-class callables) Π² константни ΠΈΠ·Ρ€Π°Π·ΠΈ, Π² ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° бСшС ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ ΡƒΠΊΠ°Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° нСизмСняСми стойности, изчислявани ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° компилация. НапримСр, сСга Π΅ възмоТно Π΄Π° сС ΡƒΠΊΠ°Π·Π²Π°Ρ‚ замикания Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈΡ‚Π΅, стойноститС ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ константитС. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ замикания Π²ΠΈΠ½Π°Π³ΠΈ трябва Π΄Π° сС ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°Ρ‚ с ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° Β«staticΒ» ΠΈ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΎΠ±Ρ€ΡŠΡ‰Π°Ρ‚ към външни ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Ρ‡Ρ€Π΅Π· ΠΈΠ·Ρ€Π°Π·Π° Β«useΒ». #[SkipDiscovery(static function (Container $container): bool { return ! $container->get(Application::class) instanceof ConsoleApplication; })]
  • ΠŸΡ€ΠΈ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ„Π°Ρ‚Π°Π»Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ към тСкста Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ сСга сС прикрСпя ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ прослСдяванС (backtrace) Π½Π° извикванията.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ са Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ array_first() ΠΈ array_last(), ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Ρ‚ ΠΏΡŠΡ€Π²ΠΈΡ ΠΈ послСдния Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π° масива. НапримСр, вмСсто $first = $array[array_key_first($array)] ?? null; сСга ΠΌΠΎΠΆΠ΅ Π΄Π° сС пишС $first = array_first($array);
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΌΠΎΠ΄ΡƒΠ» URI, прСдоставящ опростСн API Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΈΠ½ΠΊΠΎΠ²Π΅. Π Π°Π·Π±ΠΎΡ€ΡŠΡ‚ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ uriparser ΠΈ lexbor. use Uri\Rfc3986\Uri; $uri = new Uri(β€˜https://opennet.me/64290’); $uri->getHost(); // opennet.me $uri->getScheme(); // https://
  • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Β«#[DelayedTargetValidation]Β», с ΠΊΠΎΠΉΡ‚ΠΎ Π΅ възмоТно Π΄Π° сС прСмСсти ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈΡ‚Π΅, ΠΊΠ°Ρ‚ΠΎ Β«#[Override]Β», ΠΎΡ‚ Π΅Ρ‚Π°ΠΏΠ° Π½Π° компилация Π² Π΅Ρ‚Π°ΠΏΠ° Π½Π° изпълнСниС. #[DelayedTargetValidation] #[Override] public const NAME = β€˜Child’;
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ са Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ get_error_handler() ΠΈ get_exception_handler() Π·Π° опрСдСлянС Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.
  • Π’ ΠΌΠΎΠ΄ΡƒΠ»Π° Curl Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° функцията curl_share_init_persistent(), която позволява ΡΡŠΠ²ΠΌΠ΅ΡΡ‚Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° дСскриптори ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ заявки.
  • Π’ ΠΌΠΎΠ΄ΡƒΠ»Π° Exif Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° изобраТСния във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ‚Π΅ HEIF ΠΈ HEIC.
  • ОбявСни Π·Π° остарСли: нСстандартният синтаксис Π·Π° ΠΏΡ€ΠΈΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠΌΠ΅Π½Π° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«(integer)Β», Π° Π½Π΅ Β«(int)Β»); ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΈ ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ (`) Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ вмСсто shell_exec(); ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΈ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ Π½Π° константи; ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° ΠΈ запСтая вмСсто Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ Π·Π° Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ case; ΡƒΠΊΠ°Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° null вмСсто Π½Π° ΠΏΡ€Π°Π·Π΅Π½ Π½ΠΈΠ· Π² масиви ΠΈΠ»ΠΈ във функцията array_key_exists(). ΠžΡ‚ ini Ρ„Π°ΠΉΠ»Π° Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π·Π° настройката Β«disabled_classesΒ».

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster