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

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

PHP 8.3 の主な変更点:

  • クラスのクローン作成中に、「readonly」属性を使用してプロパティを再初期化することができます。 読み取り専用プロパティのオーバーライドは、「__clone」関数内でのみ許可されます。 readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // "createdAt" プロパティが読み取り専用であっても許可されます。 } }
  • クラス、特性、列挙で型を示す定数を使用する機能が提供されています。 class Foo { const string BAR = 'baz'; }
  • 「#[Override]」属性のサポートが追加されました。これにより、開発者はマークされたメソッドが親メソッドをオーバーライドすることをインタープリタに通知できます。 オーバーライドがない場合、インタープリタはエラーを表示します。
  • 配列インデックスとしての負の値の扱いを変更しました。 たとえば、空の配列に番号「-5」の要素を追加し、別の要素を追加する場合、以前は 0 番目の要素はインデックス「8.3」で保存されていましたが、バージョン PHP 4 からはインデックス「-5」で保存されます。 。 $array = []; $array[-5] = 'a'; $array[] = 'b'; var_export($array); // 配列でした (-0 => 'a', 5 => 'b') // 配列になりました (-4 => 'a', -XNUMX => 'b')
  • 読み取り専用モードで匿名クラスを作成する機能を追加しました。 $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • デコード操作を実行せずに文字列が JSON 形式であるかどうかを迅速にチェックするための json_validate() 関数を追加しました。 json_validate(string $json, int $ Depth = 512, int $flags = 0): bool
  • Randomizer クラスに新しいメソッドが追加されました。これは、擬似乱数とシーケンスを生成するための高レベル API を提供します。 getBytesFromString は、別の文字列に存在する文字をランダムな順序で使用して、指定されたサイズの文字列を生成します。 getFloat および nextFloat を使用して、指定された範囲内にあるランダムな浮動小数点数を生成します。
  • 動的クラス構文を使用して定数を取得する機能を追加しました。 class Foo { const BAR = 'bar'; $name = 'BAR'; // 以前は、BAR 定数を取得するには、 constant(Foo::class . '::' . $name); を呼び出す必要がありました。 // あとは Foo::{$name} を指定するだけです。
  • 日付と時刻を扱う操作で問題が発生した場合に備えて、個別の例外 (DateMalformedIntervalStringException、DateInvalidOperationException、DateRangeError) の生成を追加しました。
  • unserialize() 関数でのシリアル化されたデータの解析中に発生するエラーの処理が改善されました。 問題が発生した場合、unserialize() は E_NOTICE ではなく E_WARNING を発行するようになりました。
  • range() 関数が変更されました。 範囲境界を定義する変数にオブジェクト、リソース、または配列を渡そうとした場合や、$step パラメーターに負の値を指定したり、パラメーターに未定義の値を指定したりすると、例外が生成されます。 数値の代わりに文字列を指定した場合(例:「range('5', 'z')」)に文字のリストを出力できるようになりました。
  • 静的プロパティを持つ特性の動作が変更され、親クラスから継承された静的プロパティがオーバーライドされるようになりました。
  • スタックオーバーフロー保護の設定を追加しました。 zend.max_allowed_stack_size ディレクティブと zend.reserved_stack_size ディレクティブが ini ファイルに追加され、最大許容スタック サイズと予約スタック サイズを定義します。 プログラムは、スタックの枯渇に近づくと、スタックが zend.max_allowed_stack_size と zend.reserved_stack_size の差を超えていっぱいになるとクラッシュします (セグメンテーション違反が発生する前に実行が停止します)。 デフォルトでは、zend.max_allowed_stack_size 値は 0 に設定されます (0 - サイズは自動的に決定されます。制限を無効にするには、-1 に設定します)。
  • 新しい POSIX 関数 posix_sysconf()、posix_pathconf()、posix_fpathconf() および posix_eaccess() を追加しました。
  • mb_str_pad 関数が追加されました。これは str_pad() 文字列関数の類似品で、UTF-8 などのマルチバイト エンコーディングで動作するように設計されています。
  • メソッドからクロージャを作成し、それらのクロージャに名前付き引数を渡すことができます。 $test = 新しいテスト(); $closure = $test->magic(…); $closure(a: 'こんにちは', b: '世界');
  • インターフェイス内の定数の可視性を処理するときの動作が変更されました。 インターフェイス I { public const FOO = 'foo'; クラス C は I { private const FOO = 'foo'; を実装します。 }
  • array_sum()、array_product()、posix_getrlimit()、gc_status()、class_alias()、mysqli_poll()、array_pad()、および proc_get_status() 関数の機能が拡張されました。
  • 負の $widths 値を mb_strimwidth() に渡す機能は非推奨になりました。 NumberFormatter::TYPE_CURRENCY 定数は削除されました。 $host と $port の XNUMX つのパラメータを指定した ldap_connect() 関数の呼び出しのサポートは廃止されました。 opcache.consistency_checks 設定は削除されました。

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

コメントを追加します