新しい self と新しい static の違いを理解する
PHP では、self と static は新しいオブジェクトをインスタンス化するためにクラス メソッド内でよく使用されます。特に継承の文脈では。ただし、これら 2 つのキーワードには微妙な違いがあります。
新しい self と新しい static
PHP 5.2 への影響
PHP 5.3 ライブラリを PHP 5.2 に変換する場合、遅延静的バインディングのサポートがありません。 、 new static($options) を new self($options) に置き換えると、意図した結果が得られない可能性があります。これは、self が常に new が実際に書き込まれるクラスを参照するのに対し、static はターゲット クラスの解決に柔軟性を提供するためです。
例:
次のコードを考えてみましょう。 PHP 5.2:
class A { public static function create() { return new self(); } } class B extends A {} $object = B::create(); // $object is of class A, not B
PHP 5.3 では、同じコードでクラス B のオブジェクトがインスタンス化されていました。 static は呼び出しクラスに解決されるためです。
現在の推奨事項
PHP 5.2 はアクティブにサポートされなくなったため、この問題の回避策を見つけるのは現実的ではありません。互換性の理由から、遅延静的バインディングの使用を完全に避けることをお勧めします。
以上がPHP `self` と `static`: `new static()` と `new self()` はどのような点で異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。