ホームページ > バックエンド開発 > PHPチュートリアル > PHPのnew staticとnew selfの詳しい説明

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

高洛峰
リリース: 2023-03-05 21:54:01
オリジナル
1226 人が閲覧しました

現在のメソッドが定義されているクラスに応じて、現在のクラスへの静的参照には 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 が配置されるクラスです。たとえば、次の例のようになります。

PHP new static 和 new self详解

rrreee

🎜 は、常に お父さんコード>。 🎜🎜new static🎜🎜2. <code>static は上記に基づいて少し賢くなっています。staticnew static() クラスを実行するために戻ります。たとえば、Songet_class(Son::getStatic()) を実行して Son を返し、Father は を実行します。 get_class(Father::getStatic()) は Father を返します🎜🎜 そして、継承がない場合は、new selfnew static を考えることができます。 は同じ結果を返します。 🎜🎜ヒント: 優れた IDE を使用すると、コメントを直接読むことができます。たとえば、PhpStorm: 🎜🎜🎜🎜🎜 PHP の新しい静的および新しい自己に関する詳細な記事については、PHP 中国語 Web サイトに注目してください。 🎜
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート