ИзданиС Π½Π° програмски јазик PHP 8.1

По Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° Ρ€Π°Π·Π²ΠΎΡ˜, бСшС прСтставСно ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° програмскиот јазик PHP 8.1. Новата Π³Ρ€Π°Π½ΠΊΠ° Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° Π½ΠΈΠ·Π° Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊΠΎ ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΈ ја Π½Π°Ρ€ΡƒΡˆΡƒΠ²Π°Π°Ρ‚ компатибилноста.

ΠšΠ»ΡƒΡ‡Π½ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΡƒΠ²Π°ΡšΠ° Π²ΠΎ PHP 8.1:

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

Π˜Π·Π²ΠΎΡ€: opennet.ru

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€