上級 › self:: で作ったインスタンスは継承先のサブクラスにならない(static:: との違い) › パターン5
self:: で作ったインスタンスは継承先のサブクラスにならない(static:: との違い)
戻り値の型を static と宣言したメソッドの中で new self() を使うと、呼び出し元がサブクラスであっても常に定義元のクラスのインスタンスが作られます。
1 <?php 2 class Widget { 3 public static function make(): static { 4 return new ______(); ^ 5 } 6 } 7 class Button extends Widget {} 8 $obj = Button::make(); 9 echo get_class($obj);
Fatal error: Uncaught TypeError: Widget::make(): Return value must be of type Button, Widget returned in main.php:4
空欄を埋めて実行を通す
self::は定義されたクラス(Widget)に固定されます。呼び出し元のサブクラス(Button)を返したい場合はstaticを使う必要があります。
次の問題