ホームページ  >  記事  >  バックエンド開発  >  PHPのnew staticとnew selfの詳しい説明

PHPのnew staticとnew selfの詳しい説明

墨辰丷
墨辰丷オリジナル
2018-05-25 11:14:441252ブラウズ

現在のメソッドが定義されているクラスに応じて、現在のクラスへの静的参照には 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 selfnew static

new self

1.self は、new self のキーワード new が配置されるクラスです。たとえば、次の例のようになります。

rrreee

は、常に お父さんコード>。 <br>

new static

2. static は上記に基づいて少し賢くなっています: staticnew static() クラスを実行するために戻ります。たとえば、Songet_class(Son::getStatic()) を実行して Son を返し、Father は を実行します。 get_class(Father::getStatic()) は Father を返します

そして、継承がない場合は、new selfnew static を考えることができます。 は同じ結果を返します。 ヒント: 優れた IDE を使用すると、コメントを直接読むことができます。たとえば、PhpStorm:

上記がこの記事の全内容です。皆さんの学習に役立つことを願っています。

関連する推奨事項:

PHP の new self() と new static() の違いの分析

php での self と this の使用

🎜🎜🎜🎜これでPHP 🎜 self🎜 static 🎜🎜🎜🎜🎜🎜🎜🎜🎜 の違い

以上がPHPのnew staticとnew selfの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。