古いバージョンの PHP では、return new self() を使用してこのクラスのインスタンスを返しますが、このメソッドには大きな欠点があります。つまり、self は呼び出しコンテキストではなく解析コンテキストを参照します。 この記事では主に PHP の遅延静的バインディング static について詳しく説明します。お役に立てれば幸いです。
abstract class father { public static function create() { return new self(); } } class son1 extends father { } son1::create();
つまり、上記のコードで create() メソッドを呼び出しているサブクラスは、実際には親クラスのインスタンスを返します。これは、self が呼び出された場所ではなく定義された場所を指しているためです。親クラスは抽象クラスであるため、この段落のコードは致命的なエラーを報告します。
遅延静的バインディングは、PHP 5.3 以降、static キーワードを使用して導入されました。 <code> <br>
abstract class father { public static function create() { return new static(); } } class son1 extends father { } son1::create();
self を static に変更すると、static は定義されたクラスではなく呼び出されたクラスを指すため、通常どおり実行されます。
非静的コンテキストから呼び出された場合でも、静的メソッドの識別子として static を使用することもできます。これについては後で書きます。
関連する推奨事項:
php遅延静的バインディングとは何ですか?遅延静的バインディングのサンプルコードを詳しく解説
以上がPHPの遅延静的バインディングの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。