下位互換性のない変更点PHP コアコールスタックがオーバーフローしそうになっているプログラムコールスタックがオーバーフローしそうになっているプログラムは、zend.max_allowed_stack_size - zend.reserved_stack_size (ファイバーの場合は fiber.stack_size - zend.reserved_stack_size) バイト以上のスタックを使い切った時点で Error をスローするようになりました。 proc_get_status() を複数回コールする
proc_get_status を複数回コールした場合、POSIX システムでは常に正しい値を返すようになりました。これより前のバージョンでは、最初の呼び出しの場合にだけ正しい値を返していました。proc_get_status をコールしたあとに proc_close を呼び出した場合も、正しい終了コードを返すようになりました。これより前のバージョンでは、 実行時間の最大秒数を制御するタイマー実行時間の最大秒数を制御するタイマーが、Linux 上で ZTS を有効にしてビルドした場合でもデフォルトで有効になりました。 static プロパティと一緒にトレイトを使うstatic プロパティと一緒にトレイトを使うと、親クラスから継承する static プロパティを再宣言するようになりました。つまり、現在のクラスのために別の static プロパティを作成するということです。これは、トレイトを使わずに直接 static プロパティを追加する操作に似ています。 空の配列に負のインデックスを割り当てる
空の配列に負のインデックス $n を割り当てた場合、その次のインデックスは クラス定数のアクセス権クラス定数のアクセス権が、インターフェイスから継承した場合でも正しくチェックされるようになりました。 キーが自分自身を参照している WeakMap のエントリWeakMap のエントリには、(おそらく推移的に) キーが自分自身を参照しているものがあります。そのキーが到達できない場合に、循環参照のコレクタがそれを削除できるようになりました。但し、WeakMap をループしている場合を除きます (ループ経由で到達できることは、weak と見なされるためです)。これより前のバージョンでは、こうしたエントリは自動で決して削除されませんでした。 Date日付・時刻の拡張モジュールでは、DateError と DateException の階層に、拡張モジュール特有の例外とエラーを追加しました。これは、エラー時に警告や汎用の例外を発生させていた動作を置き換えるものです。これらによって、エラーや例外をチェックする必要がなくなり、エラーハンドリングが改善できます。 DOM親が存在しないノード上で DOMChildNode::after, DOMChildNode::before, DOMChildNode::replaceWith をコールしても、親子関係に関する例外をスローせず、何もしなくなりました。これは DOM の仕様が要求している振る舞いです。
ドキュメントノードが存在しない状態で DOMParentNode と DOMChildNode のメソッドを使うと、 prefix を指定せずに DOMDocument::createAttributeNS をコールすると、デフォルトの名前空間を誤って作成し、その名前空間中に属性ではなく要素を置いていました。PHP 8.3 では、このバグが修正されています。
以前のバージョンでは、 DOMDocument::createAttributeNS は、prefix が既に異なる URI で使われている場合に 新しいメソッドやプロパティが DOM クラスに追加されました。ユーザー定義のクラスがこれらを継承し、メソッドやプロパティを親クラスのものと同じ名前で宣言した場合、それらの宣言には互換性がなければいけません。互換性がない宣言の場合、それを指摘するコンパイルエラーがスローされることになります。新しく実装されたメソッドやプロパティについては、新機能 のセクションと 新しく追加された関数 を参照ください。 FFI
void 型を返すC言語の関数は、 OpcacheINI ディレクティブ opcache.consistency_checks が削除されました。この機能は tracing JIT や、inheritance cache (継承関係をキャッシュする機能) と一緒に使った場合に壊れてしまっていました。その後、このディレクティブを有効にする方法が見つからないまま、PHP 8.1.18 と 8.2.5 で無効にされました。tracing JIT と inheritance cache は両方、スクリプトが永続化された後に共有メモリを変更し、そのチェックサムを無効にする可能性があります。変更されうるポインタをスキップする変更も試みられましたが、複雑過ぎて受け入れられませんでした。以上の理由から、壊れてしまうバグを修正するのではなく、ディレクティブそのものが削除されることになりました。 PharPhar クラスの定数が、型宣言するようになりました。 標準ライブラリrange 関数に対して、さまざまな変更が加えられました:
number_format は、負の
file 関数の flags パラメータは、すべての不正な値をチェックするようになりました。注意すべきなのは、これより前のバージョンでは SNMPSNMP クラスの定数が、型宣言するようになりました。 |