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

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

PHP 8.2 の主な改善点:

  • クラスを読み取り専用としてマークする機能が追加されました。 このようなクラスのプロパティは XNUMX 回のみ設定でき、その後は変更できません。 以前は、個々のクラス プロパティを読み取り専用としてマークできましたが、すべてのクラス プロパティに対してこのモードを一度に有効にできるようになりました。 クラス レベルで「readonly」フラグを指定すると、プロパティがクラスに動的に追加されることもブロックされます。 readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = '間違っています'; // エラー: 動的プロパティ Post::$unknown を作成できません
  • 個別の型「true」、「false」、「null」が追加されました。これらは有効な値を XNUMX つだけ取ることができ、たとえば、エラー終了フラグまたは空の値を持つ関数を返すために使用されます。 以前は、「true」、「false」、「null」は他の型 (「string|false」など) と組み合わせてのみ使用できましたが、現在は個別に使用できるようになりました。 function alwaysFalse(): false { return false ; }
  • エラー時にスタック トレース出力内の機密パラメータをフィルタリングする機能を提供します。 発生したエラーに関する情報が、問題を追跡して開発者に通知するサードパーティ サービスに自動的に送信される場合、特定の情報を切り出すことが必要になる場合があります。 たとえば、ユーザー名、パスワード、環境変数を含むパラメーターをトレースから除外できます。 function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); test('foo', 'パスワード', 'baz'); 致命的なエラー: キャッチされません例外: test.php のエラー:8 スタック トレース: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} が test.php でスローされました8号線で
  • トレイト (トレイト、コードを再利用するためのメカニズム) で定数を定義できるようになりました。 特性で定義された定数には、その特性を使用するクラスを通じてアクセスできます (ただし、特性名を通じてはアクセスできません)。 trait Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // 致命的なエラー } } class Bar { Foo を使用します。 var_dump(Bar::CONSTANT); // 1
  • 論理和正規形 (DNF、論理和正規形式) で型を指定する機能が追加されました。これにより、型の結合 (XNUMX つ以上の型のコレクション) と型の共通部分 (値が複数の型に該当する型) を組み合わせることができます。同時にタイプします)。 class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; $entityを返します。 } }
  • 疑似乱数とシーケンスを生成するための関数とクラスを備えた新しい拡張機能「Random」が提案されました。 このモジュールはオブジェクト指向インターフェイスを提供し、暗号化での使用に適したものを含む疑似乱数を生成するためのさまざまなエンジンを選択できるようにします。また、配列と文字列をランダムに混合したり、ランダムな配列キーを選択したりするための補助機能を提供します。独自の独立した状態で複数のジェネレーターを同時に使用できます。 $rng = $is_production ? 新しいランダム\エンジン\セキュア() : 新しいランダム\エンジン\Mt19937(1234); $randomizer = 新しいランダム\ランダマイザー($rng); $randomizer->shuffleString('foobar');
  • ロケールに依存しない大文字と小文字の変換を実装しました。 strto lower() や strtoupper() などの関数は、「C」ロケールに設定されているかのように、ASCII 範囲内の文字の大文字と小文字を常に変換するようになりました。
  • 新しい関数を追加しました: mysqli_execute_query、curl_upkeep、memory_reset_peak_usage、ini_parse_quantity、libxml_get_external_entity_loader、sodium_crypto_stream_xchacha20_xor_ic、openssl_cipher_key_length。
  • 新しいメソッドを追加しました: mysqli::execute_query、ZipArchive::getStreamIndex、ZipArchive::getStreamName、ZipArchive::clearError、ReflectionFunction::isAnonymous、ReflectionMethod::hasPrototype。
  • クラス内にプロパティを動的に作成する機能は非推奨になりました。 PHP 9.0 では、クラス内で最初に定義されていないプロパティにアクセスすると、エラー (ErrorException) が発生します。 プロパティを作成するための __get および __set メソッドを提供するクラス、または stdClass の動的プロパティは変更せずに引き続き動作します。開発者を隠れたバグから保護するために、存在しないプロパティを使用した暗黙的な作業のみがサポートされます。 古いコードの作業を保存するために、動的プロパティの使用を許可する「#[AllowDynamicProperties]」属性が提案されています。
  • 式「${var}」および ${(var)} を使用して変数値を文字列に置き換える機能は非推奨になりました。 一般的に使用される「{$var}」および「$var」置換のサポートは維持されています。 例: 「こんにちは {$world}」; OK "Hello $world"; OK "こんにちは ${world}"; 非推奨: 文字列での ${} の使用は非推奨です
  • 「call_user_func($callable)」経由で呼び出すことはできますが、「$callable()」の形式での呼び出しをサポートしていない部分的にサポートされている呼び出し可能オブジェクトを非推奨にしました: 「self::method」「parent::method」「static」::method " ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [new Foo, "Bar::method" 】
  • error_log_mode ディレクティブが設定に追加され、エラー ログへのアクセス モードを決定できるようになりました。

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

コメントを追加します