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