現在のメソッドが定義されているクラスに応じて、現在のクラスへの静的参照には self:: または __CLASS__ を使用します。static:: を使用すると、現在のメソッドが定義されているクラスに解決されなくなりますが、計算されます。実際の実行時。静的メソッドの呼び出し (ただし、それに限定されない) に使用できるため、「静的バインディング」とも呼ばれます。
最近、ビデオのコメントでちょっとした質問を受けました。ここで self の代わりに static を使用することを選択する場合、特別な考慮事項はありますか?あるいは、質問を次のように変更することもできます:
PHP における new static と new self とは何ですか?
実際、例を見てみると非常に明確になるはずです:
class Father { public static function getSelf() { return new self(); } public static function getStatic() { return new static(); } } class Son extends Father {} echo get_class(Son::getSelf()); // Father echo get_class(Son::getStatic()); // Son echo get_class(Father::getSelf()); // Father echo get_class(Father::getStatic()); // Father
これに注目してください。ここの行 get_class(Son::getStatic());
はクラス Son
を返します。これは次のように要約できます: get_class(Son::getStatic());
返回的是 Son
这个 class,可以总结如下:
new self
1.self
返回的是 new self
中关键字 new
所在的类中,比如这里例子的 :
public static function getSelf() { return new self(); // new 关键字在 Father 这里 }
始终返回 Father
。
new static
2.static
则上面的基础上,更聪明一点点:static
会返回执行 new static()
的类,比如 Son
执行 get_class(Son::getStatic())
返回的是 Son
, Father
执行 get_class(Father::getStatic())
返回的是 Father
而在没有继承的情况下,可以认为 new self
和 new static
self
は、new self
のキーワード new
が配置されるクラスです。たとえば、次の例のようになります。 rrreee🎜 は、常に お父さんコード>。 🎜🎜new static🎜🎜2. <code>static
は上記に基づいて少し賢くなっています。static
は new static()
クラスを実行するために戻ります。たとえば、Son
は get_class(Son::getStatic())
を実行して Son
を返し、Father
は を実行します。 get_class(Father::getStatic()) は Father
を返します🎜🎜 そして、継承がない場合は、new self
と new static を考えることができます。
は同じ結果を返します。 🎜🎜ヒント: 優れた IDE を使用すると、コメントを直接読むことができます。たとえば、PhpStorm: 🎜🎜🎜🎜🎜 PHP の新しい静的および新しい自己に関する詳細な記事については、PHP 中国語 Web サイトに注目してください。 🎜