Π‘Π»Π΅Π΄ Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π±Π΅ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π° Π²Π΅ΡΡΠΈΡ 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
