プログラミング言語 PHP 8.1 のリリース

8.1 年間の開発を経て、PHP XNUMX プログラミング言語のリリースが発表されました。 新しいブランチには、一連の新機能に加えて、互換性を損なういくつかの変更が含まれています。

PHP 8.1 の主な改善点:

  • 列挙のサポートが追加されました。たとえば、次の構造を使用できるようになりました。 アクティブな場合。 事件はアーカイブされました。 } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
  • ファイバーと呼ばれる軽量スレッドのサポートが追加されました。これにより、実行スレッドを低レベルで管理できるようになります。 ファイバーのサポートは、Amphp および ReactPHP フレームワークに追加される予定です。 $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('サスペンド後'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber->resume('再開後');
  • オブジェクト コード キャッシュ (opcache) の実装が改善され、クラス継承に関する情報をキャッシュできるようになりました。 最適化により、一部のアプリケーションのパフォーマンスを 5 ~ 8% 向上させることができました。 その他の最適化には、JIT 操作の最適化、ARM64 アーキテクチャ (AArch64) の JIT サポートの実装、名前解決の高速化、timelib および ext/date ライブラリの最適化、シリアル化および逆シリアル化のパフォーマンスの向上、get_declared_classes()、explode() の最適化が含まれます。 、strtr() 関数、strnatcmp()、dechex()。 一般に、Symfony Demo では 23.0%、WordPress では 3.5% のパフォーマンス向上があります。
  • 配列内のアンパック演算子「...$var」は、新しい配列を定義するときに既存の配列の置換を可能にし、文字列キーをサポートするように拡張されました (以前はデジタル識別子のみがサポートされていました)。 たとえば、コード内で次のように使用できるようになりました。 $array1 = [“a” => 1]; $array2 = ["b" => 2]; $array = [“a” => 0, …$array1, …$array2]; var_dump($array); // ["a" => 1、"b" => 2]
  • デフォルトパラメータとしての関数定義や引数属性など、イニシャライザで "new" キーワードを使用することができます。 class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {} }
  • クラス プロパティに読み取り専用アクセスのマークを付けることができます (そのようなプロパティの情報は XNUMX 回のみ書き込むことができ、その後は変更できなくなります)。 class PostData { public function __construct( public readonly string $title, public readonly DateTimeImmutable $date, ) {} } $post = new Post('Title', /* … */); $post->title = 'その他'; > エラー: 読み取り専用プロパティ Post::$title を変更できません
  • 呼び出し可能なオブジェクト用に新しい構文が実装されました。関数を呼び出し、値 "..." を引数として渡すことでクロージャーを形成できるようになりました (つまり、Closure::fromCallable('myFunc の代わりに myFunc(...) を使用します)。 ')): function foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • 交差タイプの完全なサポートが追加され、既存のものを組み合わせて新しいタイプを作成できるようになりました。 XNUMX つ以上の型のコレクションを定義する共用体型とは異なり、交差型では、リストされた型のいずれかが存在する必要はなく、セット内の指定された型がすべて存在する必要があります。 functiongenerateSlug(HasTitle&HasId $post) { return strto lower($post->getTitle()) 。 $post->getId(); }
  • 新しいタイプ「never」を使用すると、たとえば例外をスローしたり、exit 関数を実行したりして、関数がプログラムの実行を終了することを静的アナライザーに通知できます。 function dd(mixed $input): Never { exit; }
  • 新しい関数 array_is_list が提案されました。これを使用すると、配列内のキーが 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); // 間違い
  • 「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);
  • 以前使用されていた接頭辞「0」に加えて、0 進数の接頭辞「0o」および「016O」を使用できる機能が追加されました。 0 === 16o016; // true 0 === 16OXNUMX; // 真実
  • $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_* 関数はオブジェクトに転送されました。
  • null 値を非 null 許容としてマークされた内部関数に引数として渡すことは非推奨になりました。 PHP 8.1 では、str_contains("string", null) のような構造を使用すると警告が発生し、PHP 9 ではエラーが発生します。
  • MurmurHash3 および xxHash ハッシュ アルゴリズムのサポートが追加されました。

出所: オープンネット.ru

コメントを追加します