ReturnTypeWillChange アトリビュート

(PHP 8 >= 8.1.0)

はじめに

PHP 8.1.0 以降、内部クラスのメソッドが戻り値の型を宣言するようになる、 暫定的な移行フェーズが始まりました。

ほとんどの final でない内部メソッドは、 それをオーバーライドする際、 互換性がある戻り値の型を宣言することが必須になっています。 そうしない場合、継承が有効かを検証する際に、 シグネチャが共変性のルールに違反しているという推奨されない警告が発生します。

将来のバージョンの PHP では、メソッドのシグネチャが厳密にチェックされるようになり、 互換性がない場合は致命的なエラーが発生するようになります。

PHP のバージョン間の互換性を保ちたいがために、 戻り値の型を宣言できない場合や、 オーバーライドするメソッドが互換性のない戻り値の型を宣言している場合は、 アトリビュート #[\ReturnTypeWillChange] を追加することで警告を抑止できます。

警告

ユーザー定義のクラスで定義されたメソッドをオーバーライドする場合、 戻り値の型は厳密にチェックされます。 オーバーライドするメソッドにこのアトリビュートが指定されていても、 型に互換性がない場合は致命的なエラーが発生します。

ReturnTypeWillChange アトリビュートが推奨されない警告を抑止するのは、 暫定的な戻り値の型のフェーズの間だけです。 厳密な型チェックが強制されるようになると、このアトリビュートは機能しなくなり、 内部クラスのメソッドをオーバーライドする際にシグネチャの互換性がないと、 致命的なエラーが発生するようになります。

クラス概要

#[\Attribute]
final class ReturnTypeWillChange {
/* メソッド */
public function __construct()
}

目次