ΠŸΡƒΡΠΊΠ°Π½Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ PHP 8.1

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

ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈ подобрСния Π² PHP 8.1:

  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° изброявания, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ слСднитС конструкции: enum Status { case Pending; case Active; случай Архивиран; } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π»Π΅ΠΊΠΈ нишки, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΈ Fibers, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΈ позволяват Π΄Π° управляватС нишки Π·Π° изпълнСниС Π½Π° ниско Π½ΠΈΠ²ΠΎ. ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° Fiber сС ΠΏΠ»Π°Π½ΠΈΡ€Π° Π΄Π° бъдС Π΄ΠΎΠ±Π°Π²Π΅Π½Π° към Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Amphp ΠΈ ReactPHP. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('after suspending'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber->resume('слСд възобновяванС');
  • РСализацията Π½Π° кСша Π½Π° обСктния ΠΊΠΎΠ΄ (opcache) Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ възмоТно ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° информация Π·Π° наслСдяванСто Π½Π° класовС. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡΡ‚Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ възмоТно ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° производитСлността Π½Π° някои прилоТСния с 5-8%. Π”Ρ€ΡƒΠ³ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° JIT опСрацията, внСдряванС Π½Π° JIT ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° ARM64 (AArch64), ускоряванС Π½Π° Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° способност Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π°, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ timelib ΠΈ ext/date, повишСна производитСлност Π½Π° сСриализация ΠΈ дСсСриализация, оптимизация Π½Π° get_declared_classes(), explode() , функция strtr(), strnatcmp(), dechex(). ΠšΠ°Ρ‚ΠΎ цяло ΠΈΠΌΠ° 23.0% ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° производитСлността Π·Π° Symfony Demo ΠΈ 3.5% Π·Π° WordPress.
  • ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π·Π° Ρ€Π°Π·ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π²ΡŠΡ‚Ρ€Π΅ Π² масиви "...$var", ΠΊΠΎΠΉΡ‚ΠΎ позволява замСстванС Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ масиви ΠΏΡ€ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° Π½ΠΎΠ² масив, Π΅ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½, Π·Π° Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Π·Π° Π½ΠΈΠ·ΠΎΠ²Π΅ (ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ…Π° само Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ). НапримСр, Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π² ΠΊΠΎΠ΄Π°: $array1 = [β€œa” => 1]; $масив2 = ["b" => 2]; $масив = [β€œa” => 0, …$масив1, …$масив2]; var_dump($масив); // ["a" => 1, "b" => 2]
  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° "new" Π² ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈΠ»ΠΈ Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ. class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {} }
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° сС ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Ρ‚ свойства Π½Π° класа Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ (информацията Π² Ρ‚Π°ΠΊΠΈΠ²Π° свойства ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС записана само вСднъТ, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ няма Π΄Π° бъдС Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π° Π·Π° промяна). class PostData { public function __construct( public readonly string $title, public readonly DateTimeImmutable $date, ) {} } $post = new Post('Title', /* … */); $post->title = 'Π”Ρ€ΡƒΠ³ΠΈ'; > Π“Ρ€Π΅ΡˆΠΊΠ°: НС ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ свойството само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Post::$title
  • Π’ΡŠΠ²Π΅Π΄Π΅Π½ Π΅ Π½ΠΎΠ² синтаксис Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π΅ΠΌΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ - затварянС Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ„ΠΎΡ€ΠΌΠΈΡ€Π° Ρ‡Ρ€Π΅Π· ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° функция ΠΈ ΠΏΠΎΠ΄Π°Π²Π°Π½Π΅ Π½Π° стойността "..." ΠΊΠ°Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ (Ρ‚.Π΅. myFunc(...) вмСсто Closure::fromCallable('myFunc ')): функция foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ пълна ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΊΡ€ΡŠΡΡ‚ΠΎΠ²ΠΈΡ‰Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ Π½ΠΎΠ²ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ Ρ‡Ρ€Π΅Π· ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ. Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΊΠΎΠΈΡ‚ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚ ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ Π΄Π²Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ прСсичанС изискват ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π΅ Π½Π° някой ΠΎΡ‚ ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏΠΎΠ²Π΅, Π° Π½Π° всички посочСни Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π² Π½Π°Π±ΠΎΡ€Π°, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° бъдС попълнСн. функция generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Има Π½ΠΎΠ² Ρ‚ΠΈΠΏ "Π½ΠΈΠΊΠΎΠ³Π°", ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½Π΅ Π½Π° статичнитС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ, Ρ‡Π΅ Π΄Π°Π΄Π΅Π½Π° функция Ρ‰Π΅ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‡Ρ€Π΅Π· Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅ Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ изпълнСниС Π½Π° функцията Π·Π° ΠΈΠ·Ρ…ΠΎΠ΄. функция dd(смСсСн $input): Π½ΠΈΠΊΠΎΠ³Π° { ΠΈΠ·Ρ…ΠΎΠ΄; }
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π΅ Π½ΠΎΠ²Π° функция array_is_list, която Π²ΠΈ позволява Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅, Ρ‡Π΅ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅ Π² масива са ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ Π² Ρ€Π΅Π΄ Π½Π° нарастващи числови стойности, ΠΊΠ°Ρ‚ΠΎ сС Π·Π°ΠΏΠΎΡ‡Π½Π΅ ΠΎΡ‚ 0: $list = [β€œa”, β€œb”, β€œc”]; array_is_list($list); // true $notAList = [1 => β€œa”, 2 => β€œb”, 3 => β€œc”]; array_is_list($notAList); // нСвярно $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // нСвярно
  • Π’Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° "final", Π·Π° Π΄Π° ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚Π΅ отмяната Π½Π° константитС Π½Π° родитСлския клас. class Foo { final public const X = "foo"; } class Bar extends Foo { public const X = "bar"; > Π€Π°Ρ‚Π°Π»Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°: Bar::X Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈ ΠΊΡ€Π°ΠΉΠ½Π°Ρ‚Π° константа Foo::X }
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ fsync ΠΈ fdatasync са ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ Π·Π° ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎ записванС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΎΡ‚ дисковия кСш. $file = fopen("sample.txt", "w"); fwrite($file, "Някакво ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅"); if (fsync($file)) { echo "Π€Π°ΠΉΠ»ΡŠΡ‚ Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°ΠΏΠ°Π·Π΅Π½ Π½Π° диск."; } fclose($file);
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° прСфикситС "0o" ΠΈ "0O" Π·Π° осмични числа, Π² допълнСниС към използвания ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° прСфикс "0". 016 === 0o16; // вярно 016 === 0O16; // вярно
  • ΠŸΡ€Π΅Π΄Π»Π°Π³Π° сС сСлСктивно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° $GLOBALS, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Π°Ρ‚Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚, Π½ΠΎ Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈ възмоТно Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ускоряванС Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ с масиви. НапримСр, обмисля сС Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° писанСто Π² $GLOBALS ΠΈ ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° $GLOBALS Ρ‡Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π». ΠΠ½Π°Π»ΠΈΠ·ΡŠΡ‚ Π½Π° 2000 ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΏΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ само 23 ΠΎΡ‚ тях Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ засСгнати ΠΎΡ‚ Ρ‚Π°Π·ΠΈ промяна. НапримСр, Π°ΠΊΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ бъдС ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ, 8.1 Π²Π΅Ρ‡Π΅ няма Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΈΠ·Ρ€Π°Π·ΠΈ ΠΊΠ°Ρ‚ΠΎ: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; Π΄Π΅Π·Π°Π΄Π°Π΄Π΅Π½ ($GLOBALS); by_ref($GLOBALS);
  • Π’ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π²Π΅Ρ‡Π΅ трябва Π΄Π° Π²Ρ€ΡŠΡ‰Π°Ρ‚ правилния Ρ‚ΠΈΠΏ. Π’ PHP 8.1 Π²Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΈΠΏ, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° дСкларацията Π½Π° функцията, Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π½ΠΎ Π² PHP 9.0 ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ бъдС Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ с Π³Ρ€Π΅ΡˆΠΊΠ°.
  • ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΏΠΎ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅Ρ‚ΠΎ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° рСсурси към ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ finfo_* ΠΈ imap_* са ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΈ към ΠΎΠ±Π΅ΠΊΡ‚ΠΈ.
  • ΠŸΡ€Π΅Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΡƒΠ»Π΅Π²ΠΈ стойности ΠΊΠ°Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ към Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΈ, Π΅ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΎ. Π’ PHP 8.1 ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° конструкции ΠΊΠ°Ρ‚ΠΎ str_contains("string", null) Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π° Π² PHP 9 Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠ°.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ…Π΅ΡˆΠΈΡ€Π°Ρ‰ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ MurmurHash3 ΠΈ xxHash.

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€