## 変更履歴

PHP の OOP モデルの変更履歴をここに記録します。 個々の機能の説明や注意点については、クラスとオブジェクトに関するドキュメントを参照ください。

バージョン | 説明
--- | ---
8.4.0 | プロパティフック がサポートされました。
8.4.0 | レイジーオブジェクトがサポートされました。
8.1.0 | 追加: クラスの定数に対して、final が指定できるようになりました。インターフェイスの定数も、デフォルトでオーバーライドできるようになりました。
8.0.0 | 追加: `null` になる可能性があるオブジェクトのメソッドやプロパティにアクセスする手段として、nullsafe 演算子 ?-> をサポートしました。
7.4.0 | 変更: __toString() から、例外をスローすることができるようになりました。
7.4.0 | 追加: 戻り値の型を制限する 共変性 と、引数の型の 反変性 がサポートされました。 完全な型の変位指定は、オートローディングが使われている場合のみ有効です。 単一ファイル内では、型の参照が循環参照していない場合のみ可能です。
7.4.0 | 追加: クラスのプロパティは、型を宣言できるようになりました。
7.3.0 | 互換性のない変更: Traversable への引数のアンパックを int でないキーで行うことはサポートされなくなりました。 このような動作は意図されていなかったので、削除されました。
7.3.0 | 互換性のない変更: 7.3.0 より前のバージョンでは、参照を代入することによって、 static なプロパティが異なる値になる可能性がありました。 この振る舞いは削除されました。
7.3.0 | 変更: instanceof 演算子が、 最初のオペランドにリテラルを受け入れるようになりました。 この場合、結果は常に FALSE を返します。
7.2.0 | 推奨されない変更: __autoload() メソッドは非推奨になりました。 spl_autoload_register() を使うのが望ましいためです。
7.2.0 | 変更: 次の名前は、クラスや trait、 インターフェイスの名前として使うことが禁止されます: `object`
7.2.0 | 変更: 名前空間のグループ指定における最後のカンマが許可されるようになりました。
7.2.0 | 変更: パラメータの型の拡大変換が可能になりました。 オーバーライドされたメソッドや、インターフェイスの実装の パラメータの型を省略できるようになりました。
7.2.0 | 変更: ある抽象クラスが別の抽象クラスを継承しているときに、 継承元クラスの抽象メソッドをオーバーライドできるようになりました。
7.1.0 | 変更: 以下のキーワードが、 クラスやインターフェイスやトレイトの名前として使えなくなりました: `void` と `iterable`
7.1.0 | 追加: クラス定数のアクセス範囲 を指定できるようになりました。
7.0.0 | 推奨されない変更: static 宣言されていないメソッドに対する static 呼び出しが非推奨となりました。
7.0.0 | 推奨されない変更: PHP 4 形式の コンストラクタ は非推奨になりました。 つまり、クラスと同じ名前のメソッドがクラスに定義されていた場合です。
7.0.0 | 追加: use 宣言のグループ化: 複数のクラスや関数そして定数を同じ namespace からインポートする際に、 単一の use 文にまとめられるようになりました。
7.0.0 | 追加: `new class` 経由での 無名クラス のサポートが追加されました。
7.0.0 | 互換性のない変更: Traversable ではない object の反復処理の挙動が、 array を参照渡しで反復処理したときと同じようになりました。
7.0.0 | 変更: (互換性のある) プロパティを2つの traits で使っても エラーにならなくなりました。
5.6.0 | 追加: __debugInfo() メソッド。
5.5.0 | 追加: ::class マジック定数。
5.5.0 | 追加: 例外処理に finally。
5.4.0 | 追加: トレイト が追加されました。
5.4.0 | 変更: 抽象クラスで コンストラクタのシグネチャを定義している場合は、 そのシグネチャに従うことが必須となりました。
5.3.3 | 変更: 名前空間 つきのクラス名の最後の部分と同じ名前のメソッドは、コンストラクタ とはみなされなくなりました。 名前空間を使っていないクラスは今までと変わりません。
5.3.0 | 変更: プロトタイプでデフォルト値を指定したメソッドをもつインターフェイスを 実装したクラスを作るときに、実装側でのデフォルト値を インターフェイスのデフォルト値と一致させなくてもよくなりました。
5.3.0 | 変更: 変数を使ってクラスを参照することができるようになりました (例: `echo $classname::constant;`)。 この変数の値に、キーワード (`self` や `parent`、`static` など) を使うことはできません。
5.3.0 | 変更: オーバーロード メソッドが static 宣言されている場合に `E_WARNING` レベルのエラーが発生するようになりました。 また、public 宣言することが必須となりました。
5.3.0 | 変更: 5.3.0 より前のバージョンでは、 __autoload() 関数の中で発生した例外を catch ブロックで捕捉することができず、 致命的なエラーとなっていました。このバージョンからは __autoload 関数内で発生した例外を catch ブロックで捕捉できるようになりましたが、ひとつ条件があります。 独自の例外クラスをスローする場合は、その例外クラスが使用可能でなければなりません。 __autoload 関数は、再帰的に呼び出されて独自の例外クラスを読み込もうとする可能性があります。
5.3.0 | 追加: __callStatic メソッド。
5.3.0 | 追加: ヒアドキュメント および Nowdoc の、クラス定数やプロパティの定義での使用。 注意: ヒアドキュメントの値は、ダブルクォートで囲んだ文字列と同じ規則に従わなければなりません (その中で変数を使えないなど)。
5.3.0 | 追加: 遅延静的束縛。
5.3.0 | 追加: __invoke() メソッド。
5.2.0 | 変更: __toString() メソッドがコールされるのは echo や print と直接組み合わせて使った場合のみでした。このバージョンからは、任意の string コンテキスト (printf() で `%s` 修飾子を使った場合など) でコールされるようになりました。ただし、他の型のコンテキスト (`%d` 修飾子を使った場合など) は除きます。 PHP 5.2.0 以降は、__toString メソッドを持たない object を string に変換しようとすると `E_RECOVERABLE_ERROR` レベルのエラーが発生します。
5.1.3 | 変更: PHP 5 の初期のバージョンでは `var` を使うことが非推奨とされており、`E_STRICT` レベルのエラーが発生していました。 このバージョンからは非推奨ではなくなり、エラーが発生しなくなりました。
5.1.0 | 変更: __set_state() メソッドが、 var_export() でエクスポートしたクラスに対してもコールされるようになりました。
5.1.0 | 追加: __isset() メソッドおよび __unset() メソッド。

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open