ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ áá áºááŸá áºá¡ááŒá¬ááœáẠPHP 8.1 áááá¯ááááºážáááºážáá¬áá¬á áá¬ážááᯠááááºáááºááŒááá²á·áááºá áá¬áááœá²á¡áá áºááœáẠáááºáá±á¬ááºááŸá¯á¡áá áºáá»á¬áž áááºááá¯ááºáá«áááºááá·áºá¡ááŒáẠááá¯ááºáááºáá®ááŸá¯ááᯠáá»áá¯ážáá»ááºááá¯ááºáá±á¬ á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážá áœá¬ áá«áááºáá«áááºá
PHP 8.1 ááœáẠá¡áááááá¯ážáááºááŸá¯áá»á¬áž-
- á á¬áááºážáá±á¬ááºááŒááºážá¡ááœáẠáááºáá±á¬ááºážáá¶á·ááá¯ážááŸá¯ á¥ááá¬á áááºááẠááᯠá¡á±á¬ááºáá«áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáá«ááŒá®- enum á¡ááŒá±á¡áá± { case Pending; á¡ááŸá¯ááœá² Active; á¡ááŸá¯ááœá² ááááºážáááºážááŒá®ážá } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(á¡ááŒá±á¡áá± $status): void { // ⊠} } $post->setStatus(Status::Active);
- Fibers áá¯áá±á«áºáá±á¬ áá±á«á·áá«ážáá±á¬ áá»ááºáá»áŸááºáá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ áááºáá±á¬ááºážááá·áºááœááºážáá¬ážááŒá®ážá áááºážááẠá¡ááá·áºáááá·áºáá±á¬ áá¯ááºáá±á¬ááºááŸá¯á¡ááá¯ááºážáá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááá¯ááºá á±áá«áááºá ááá¯ááºáá¬áá¶á·ááá¯ážááŸá¯ááᯠAmphp ááŸáá·áº ReactPHP áá°áá±á¬ááºáá»á¬ážááœáẠááá·áºááœááºážááẠá á®á ááºáá¬ážáááºá $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('after suspending'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber->resume('ááŒááºáááºá áááºááŒá®ážáá±á¬ááº');
- á¡áá¬ááá¹áá¯áá¯áẠcache (opcache) áá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááᯠááŒáŸáá·áºáááºáá¬ážááŒá®ážá á¡áááºážá¡ááœá±áááºáá¶ááŒááºážááá¯ááºáᬠá¡áá»ááºá¡áááºáá»á¬ážááᯠáááºááŸáºáá¯ááºááá¯ááºáááºá ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážá á¡áá»áá¯á·áá±á¬á¡ááá®áá±ážááŸááºážáá»á¬ážáá áœááºážáá±á¬ááºáááºááᯠ5-8% ááá¯ážááŒáŸáá·áºááá¯ááºá á±áá²á·áááºá á¡ááŒá¬ážáá±á¬ ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááœáẠJIT áá¯ááºáá±á¬ááºáá»ááºááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážá ARM64 áááá¯áᬠ(AArch64) á¡ááœáẠJIT áá¶á·ááá¯ážááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá á¡áááºááŒááºáááºááŒááºáá¬ážááŸá¯ááᯠá¡ááŸáááºááŒáŸáá·áºááŒááºážá timelib ááŸáá·áº ext/date libraries áá»á¬ážááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážá á á®ážáá®ážááá¯ááºááŒá¯áá¯ááºááŒááºážááŸáá·áº deserialization á áœááºážáá±á¬ááºáááºááá¯ážááŒáŸáá·áºááŒááºážá get_declared_classes(), explode() , strtr() áá¯ááºáá±á¬ááºáá»ááºá strnatcmp(), dechex()á áá±áá¯áá»á¡á¬ážááŒáá·áºá Symfony Demo á¡ááœáẠá áœááºážáá±á¬ááºááẠ23.0% ááŸáá·áº WordPress á¡ááœáẠ3.5% ááá¯ážáá¬áá«áááºá
- á¡áááºážá¡áá»ááºážá¡áá áºááᯠáááºááŸááºáá¬ááœáẠááŸáááŒá®ážáá¬áž array áá»á¬ážááᯠá¡á á¬ážááá¯ážááœáá·áºááŒá¯ááá·áº arrays á¡ááœááºážááŸá "...$var" á¡á±á¬áºááá±áá¬ááẠstring keys áá»á¬ážááᯠáá¶á·ááá¯ážáááºá¡ááœáẠááá¯ážáá»á²á·áá¬ážááẠ(ááááºá áá áºáá»á áºááẠááœá²ááŒá¬ážáááºááŸááºááŸá¯áá»á¬ážááá¯áᬠáá¶á·ááá¯ážáá¬ážáááº)á á¥ááá¬á¡á¬ážááŒáá·áºá áááºááẠááᯠcode ááœáẠ$array1 = [âaâ => 1]; $array2 = ["b" => 2]; $array = [âaâ => 0, âŠ$array1, âŠ$array2]; var_dump($array); // ["a" => 1, "b" => 2]
- áá¯ááºáá±á¬ááºáá»áẠá¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºáá»á¬ážááœáẠáá¯á¶áá±áá«áá¬áá®áᬠááá¯á·ááá¯áẠá¡ááŒááºážá¡áá¯á¶ attribute áá»á¬ážááœááºáá²á·ááá¯á· "á¡áá áº" áá±á¬á·áá»ááºá á¬áá¯á¶ážááᯠá¡áá¯á¶ážááŒá¯ááẠááœáá·áºááŒá¯áá¬ážáááºá á¡áááºážá¡á á¬áž 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 = 'á¡ááŒá¬áž'; > á¡ááŸá¬áž- readonly property Post::$title ááᯠáááŒááºááá¯ááºáá«á
- áá±á«áºááá¯ááá¯ááºáá±á¬ á¡áá¬ááá¹áá¯áá»á¬ážá¡ááœáẠá¡áá¬ážá¡ááá¯á¡áá áºáá áºáá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºáá«ááŒá® - áá¯ááºáá±á¬ááºáá»ááºáá áºáá¯á¡á¬áž áá±á«áºááŒá®áž áááºážá¡á¬áž "..." áá°áá±á¬ áááºááá¯ážááᯠááŒááºááŒááºážááŒáá·áº ááááºááŒááºážá¡á¬áž á¡ááŒá±á¬ááºážááŒáá»ááºáá áºáá¯á¡ááŒá Ạ(ááá¯ááá¯áááºááŸá¬ Closure::fromCallable('myFunc) á¡á á¬áž myFunc(...)) ')): áá¯ááºáá±á¬ááºáá»áẠfoo (int $aá int $b) { /* ⊠*/ } $foo = foo(âŠ); $foo(a: 1á b: 2);
- ááŸáááŒá®ážáá¬ážá¡áá¬áá»á¬ážááᯠáá±á«ááºážá ááºááŒááºážááŒáá·áº á¡áá»áá¯ážá¡á á¬ážá¡áá áºáá»á¬ážááᯠáááºáá®ážááá¯ááºá á±ááá·áº áááºážáá¯á¶á¡áá»áá¯ážá¡á á¬ážáá»á¬ážá¡ááœáẠá¡ááŒáá·áºá¡ááá¶á·ááá¯ážááŸá¯ ááá·áºááœááºážáá¬ážáááºá á¡áá»áá¯ážá¡á á¬áž ááŸá áºáᯠááá¯á·ááá¯áẠááá¯á·áááºááá¯áá±á¬ á¡á á¯á¡áá±ážáá»á¬ážááᯠáááºááŸááºááá·áº áááá¹áá¡áá»áá¯ážá¡á á¬ážáá»á¬ážááŸáá·áº ááá°áá² áááºážáá¯á¶á¡áá»áá¯ážá¡á á¬ážáá»á¬ážááẠá á¬áááºážááœááºážáá¬ážáá±á¬ á¡áá»áá¯ážá¡á á¬ážáá»á¬ážáá²á០áá áºáá¯ááá¯ááºáá áºáᯠáá«áááºáá±ááẠááá¯á¡ááºáá±á¬áºáááºáž ááŒáá·áºá áœááºáááºá¡ááœáẠáááºááŸááºáá¬ážáá±á¬ á¡áá»áá¯ážá¡á á¬ážáá»á¬ážá¡á¬ážáá¯á¶ážááᯠáááºááŸááºáá±ážáá«áááºá function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle())á $post->getId(); }
- áá¯ááºáá±á¬ááºáá»ááºáá áºáá¯ááẠááŒáœááºážáá»ááºáá áºáá¯á¡á¬áž áá áºááŒááºáž ááá¯á·ááá¯áẠááœááºáá±á«ááºáá¯ááºáá±á¬ááºáá»ááºááᯠáá¯ááºáá±á¬ááºááŒááºážááŒáá·áº áááá¯ááááºáá¯ááºáá±á¬ááºááŸá¯ááᯠáááºááá·áºá á±ááá·áº static analyzers áá»á¬ážá¡á¬áž á¡áááá±ážáááºá¡ááœáẠ"áááºáá±á¬á·ááŸ" á¡áá»áá¯ážá¡á á¬ážá¡áá áºáá áºáá¯ááŸááá«áááºá áá¯ááºáá±á¬ááºáá»áẠdd(áá±á¬ááŸá±á¬áá¬ážáá±á¬ $input)- áááºáá±á¬á·á០{ exit; }
- áá¯ááºáá±á¬ááºáá»ááºá¡áá Ạarray_is_list ááᯠá¡ááá¯ááŒá¯áá¬ážááŒá®ážá array ááŸá áá±á¬á·áá»á¬ážááᯠ0: $list = [âaâ, âbâ, âcâ] ááŸá áááºá ááááºážáááºááá¯ážáá»á¬ážááá¯ážáá¬á á±ááẠá¡á á®á¡á á¥áºáá¬ážááŸáááŒá±á¬ááºáž áá¯á¶ážááŒááºááá¯ááºá á±áá«áááºá array_is_list($list); // true $notAList = [1 => âaâ, 2 => âbâ, 3 => âcâ]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // ááá á¹áá¬
- ááá¯áááºááẠ"áá±á¬ááºáá¯á¶áž" áá±á¬á·áá»ááºá áá¬ážáá¯á¶ážááᯠá¡áá¯á¶ážááŒá¯á áááá¡áááºážá ááºáááºáááºáá»á¬ážááᯠááœáŸááºážááá¯ážááŒááºážá០áá¬ááœááºááá¯ááºáá«ááŒá®á class Foo { áá±á¬ááºáá¯á¶áž public const X = "foo"; } class Bar ááẠFoo { public const X = "bar"; > ááá¯ážááœá¬ážáá±á¬á¡ááŸá¬áž- Bar::X ááẠáá±á¬ááºáá¯á¶ážááááºážáá± Foo::X } ááᯠá¡á á¬ážááá¯ážááááá«á
- fsync ááŸáá·áº fdatasync áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠdisk cache á០á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠáááŒá áºááá±ááááºážáááºážááẠá¡ááá¯ááŒá¯áá¬ážáááºá $file = fopen("sample.txt", "w"); fwrite($fileá "á¡ááŒá±á¬ááºážá¡áá¬á¡áá»áá¯á·"); if (fsync($file)) { áá²á·áááºáᶠ"ááá¯ááºááᯠáá áºááºááœáẠá¡á±á¬ááºááŒááºá áœá¬ áááºáááºáá¬ážááŸááá²á·áááºá"; } fclose($file);
- á¡áá¹ááááááºážáá»á¬ážá¡ááœáẠááŸá±á·ááẠ"0o" ááŸáá·áº "0O" ááᯠá¡áá¯á¶ážááŒá¯ááẠá áœááºážáááºááᯠáá±á«ááºážááá·áºáá¬ážááŒá®ážá ááááºá á¡áá¯á¶ážááŒá¯áá²á·ááá·áº ááŸá±á·ááẠ"0" áááºáž ááŒá áºáááºá ááá === 016o0; //á¡ááŸáẠ16 === 016O0; //á¡ááŸááº
- áá±á¬ááºááŒááºááá¯ááºáááºááŸá¯ááᯠáá»áá¯ážáá±á¬ááºáá¬áá±á¬ááºá á±ááá·áº $GLOBALS áá¡áá¯á¶ážááŒá¯ááŸá¯ááᯠááœá±ážáá»ááºááá·áºáááºááẠá¡ááá¯ááŒá¯áá¬ážáá±á¬áºáááºážá array áá»á¬ážááŒáá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáááááá¬áᬠá¡ááŸáááºááŒáŸáá·áºááá¯ááºá á±áááºááŒá áºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá $GLOBALS ááá¯á· á á¬áá±ážááŒááºážááᯠááááºááŒá®áž ááœáŸááºááŒááŒááºážááŒáá·áº $GLOBALS ááᯠááŒááºááẠááŒá áºááá¯ááºááŒá±ááᯠá ááºážá á¬ážáá±áá«áááºá 2000 áááºáá±á·áá»áºáá»á¬ážá ááœá²ááŒááºážá áááºááŒá¬ááŸá¯ááœáẠáááºážááá¯á·áá²á០23 áá¯áᬠá€ááŒá±á¬ááºážáá²ááŸá¯ááŒá±á¬áá·áº áááºáá±á¬ááºááŸá¯ááŸááááºááᯠááŒááá²á·áááºá á¥ááá¬á¡á¬ážááŒáá·áºá á¡ááá¯ááŒá¯áá»ááºááᯠá¡áááºááŒá¯áá«áá 8.1 áááº- $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; áááºááŸááºááá¬ážáá±á¬ ($GLOBALS); by_ref($GLOBALS);
- á¡ááœááºážááá¯ááºážáááºážáááºážáá»á¬ážááẠááŸááºáááºáá±á¬á¡áá»áá¯ážá¡á á¬ážááᯠááᯠááŒááºáá±ážááá·áºáááºá PHP 8.1 ááœááºá function declaration ááŸáá·áºáááá¯ááºáá®áá±á¬á¡áá»áá¯ážá¡á á¬ážááá¯ááŒááºááá¯á·ááŒááºážáááºááááá±ážáá»ááºáá áºáá¯áá¯ááºáá±ážáááá·áºáááºá ááá¯á·áá±á¬áº PHP 9.0 ááœááºááááá±ážáá»ááºááá¯á¡ááŸá¬ážáá áºáá¯ááŒáá·áºá¡á á¬ážááá¯ážáááá·áºáááºá
- á¡áááºážá¡ááŒá áºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá០á¡áá¬ááá¹áá¯áá»á¬ážááᯠááŒáá¯ážááá¯ááºááŒááºážá¡áá áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááœáŸá²ááŒá±á¬ááºážááŒááºážááœáẠáááºáááºáá¯ááºáá±á¬ááºáááºá finfo_* ááŸáá·áº imap_* áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡áá¬ááá¹áá¯áá»á¬ážááá¯á· ááœáŸá²ááŒá±á¬ááºážááŒá®ážáá«ááŒá®á
- Nullable ááá¯ááºáᯠá¡ááŸááºá¡áá¬ážááŒá¯áá¬ážááá·áº á¡ááœááºážááá¯ááºážáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááá¯á· á¡ááŒááºážá¡áá¯á¶áá»á¬ážá¡ááŒá Ạnull áááºááá¯ážáá»á¬ážááᯠááŒááºáááºážááŒááºážááᯠáááºááá¯ááºážáá¬ážáááºá PHP 8.1 ááœááºá str_contains("string", null) áá²á·ááá¯á·áá±á¬ constructs áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááẠááááá±ážáá»ááºáá áºáá¯áá®ááá¯á· áŠážáááºááœá¬ážáááºááŒá áºááŒá®áž PHP 9 ááœáẠá¡ááŸá¬ážá¡ááœááºážáá áºáá¯ááŒá áºáá¬áááºá
- MurmurHash3 ááŸáá·áº xxHash hashing algorithms á¡ááœáẠáá¶á·ááá¯ážááŸá¯ áá±á«ááºážááá·áºáá¬ážáááºá
source: opennet.ru