この記事では主に PHP の new self() と new static() の違いについて説明します。お役に立てれば幸いです。
1.new static() は、PHP5.3 バージョンで導入された新機能です。
2. new static() または new self() のどちらでも、新しいオブジェクトが作成されます。
3. これら 2 つのメソッドの new によって生成されるオブジェクトの違いは何ですか? 端的に言えば、new によって生成されるオブジェクトは同じクラス インスタンスですか、それとも別のクラス インスタンスですか?
上記の問題を調べるために、簡単なコードから始めましょう:
class Father { public function getNewFather() { return new self(); } public function getNewCaller() { return new static(); } }$f = new Father();print get_class($f->getNewFather());print get_class($f->getNewCaller());注意,上面的代码get_class()方法是用于获取实例所属的类名。
結果は次のようになります: getNewFather() または getNewCaller() を呼び出しても、Father クラスのすべてのインスタンスが返されます。
出力された結果は次のとおりです: FatherFather
この時点では、 new self() と new static() の間に違いはないようです。続けましょう:
Sun1 Sun2 (-> (-> (-> (->getNewCaller());看上面的代码,现在这个Father类有两个子类,由于Father类的getNewFather()和getNewCaller()是public的,所以子类继承了这两个方法。
出力された結果は次のとおりです: FatherSun1FatherSun2
Sun1 であっても Sun2 であっても、getNewFather() を呼び出して返されるオブジェクトは Father クラスのインスタンスであるのに対し、getNewCaller() は呼び出し元のインスタンスを返すことがわかります。
つまり、$sun1 は Sun1 クラスのインスタンスを返し、$sun2 は Sun2 クラスのインスタンスを返します。
new self() と new static() の違いが理解できたようです。
まず第一に、それらの違いは継承にのみ反映されます。継承が存在しない場合、両者の間に違いはありません。
すると、 new self() が返すインスタンスは何千年も変化せず、誰が呼び出しても同じクラスのインスタンスを返しますが、 new static() は呼び出し元によって決定されます。
$sun1->上記の getNewCaller() の呼び出し元は $sun1 ですよね! $sun1 はクラス Sun1 のインスタンスであるため、返されるのはクラス Sun1 のインスタンスです。$sun2 と同じ理由は繰り返されません。
さて、PHP における new self() と new static() の違いについてはここまでです。何か間違っている点があれば、遠慮なくご指摘ください。コメント。
関連するおすすめ:
new self() と new static() の違いは何ですか
php の new self() と new static() の違いは何ですか!
new static() と new self() の違いと使い方の紹介
以上がPHP の new self() と new static() の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。