|
オブジェクトの継承プログラミング言語の原則としてよくみられるものに継承があります。 PHP はオブジェクトモデルにおいてこの継承を利用しています。 多くのクラスとオブジェクトとの連携に継承は関係しています。 例えば、クラスを拡張するとき、サブクラスは親クラスから public と、protected のメソッドや、プロパティや定数をすべて引き継ぎます。 (子の)クラスが親のメソッドを上書きしない限り、 親のメソッドの機能が保持されます。 これは、機能を定義して抽象化するのに便利です。 また、同じようなオブジェクトに機能を追加する際に、 共通機能を再実装する必要がなくなります。
親クラスの private メソッドは、子クラスからアクセスすることができません。
その結果として、子クラスは通常の継承のルールを無視して
private メソッドそのものを再実装することができてしまいます。
しかし、PHP 8.0.0 より前のバージョンでは、
メソッドやプロパティ、そして定数の
アクセス権
に関するルールは、子クラスで緩めることが可能です。
たとえば、
親クラスで
例1 継承の例
内部クラスと戻り値の型の互換性PHP 8.1 より前のバージョンでは、 ほとんどの内部クラスやメソッドは戻り値の型を宣言していませんでしたし、 それらを継承する際にもあらゆる戻り値の型を指定することができていました。 PHP 8.1.0 以降では、 ほとんどの内部メソッドが、戻り値の型を "とりあえず" 宣言するようになりました。 この場合、それらを継承したメソッドの戻り値の型は、 親と互換性があるものにすべきです。 そうしない場合、推奨されない警告が発生します。 注意すべきなのは、明示的に戻り値の型を宣言していない場合でも、 シグネチャが一致していないとみなされ、 推奨されない警告が発生することです。 PHP のバージョン間の互換性を保ちたいがために、 戻り値の型を宣言できない場合、 アトリビュート ReturnTypeWillChange を追加することで警告を抑止できます。 例2 戻り値の型を宣言せずにメソッドをオーバーライドする場合
例3 間違った型を宣言してメソッドをオーバーライドする場合
例4 間違った型を宣言してメソッドをオーバーライドする場合でも、警告を抑制する
|