Code Fix

上級self:: で作ったインスタンスは継承先のサブクラスにならない(static:: との違い) › パターン1

self:: で作ったインスタンスは継承先のサブクラスにならない(static:: との違い)

戻り値の型を static と宣言したメソッドの中で new self() を使うと、呼び出し元がサブクラスであっても常に定義元のクラスのインスタンスが作られます。

 1  <?php
 2  class Base {
 3      public static function create(): static {
 4          return new ______();
                          ^
 5      }
 6  }
 7  class Derived extends Base {}
 8  $obj = Derived::create();
 9  echo get_class($obj);
Fatal error: Uncaught TypeError: Base::create(): Return value must be of type Derived, Base returned in main.php:4

空欄を埋めて実行を通す

広告
広告スロット(未設定)

self:: で作ったインスタンスは継承先のサブクラスにならない(static:: との違い)

呼び出し時点のクラスを使いたい場合は new static() が必要です。

このエラーの解説と類題をまとめて見る →

広告
広告スロット(未設定)