Code Fix

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

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

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

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

空欄を埋めて実行を通す

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

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

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

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

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