Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Unterschied zwischen new self() und new static() in PHP?

Was ist der Unterschied zwischen new self() und new static() in PHP?

小云云
小云云Original
2018-03-31 13:28:231297Durchsuche

Dieser Artikel erklärt Ihnen hauptsächlich den Unterschied zwischen new self() und new static() in PHP. Ich hoffe, er kann Ihnen helfen.

1.new static() ist eine neue Funktion, die in der PHP5.3-Version eingeführt wurde.

2. Ob new static() oder new self(), ein neues Objekt ist neu.

3. Was ist der Unterschied zwischen den von new in diesen beiden Methoden erzeugten Objekten? Ist das von new erzeugte Objekt dieselbe Klasseninstanz oder eine andere Klasseninstanz?

Um das obige Problem zu untersuchen, beginnen wir mit einem einfachen Code:

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()方法是用于获取实例所属的类名。

Das Ergebnis hier ist: Egal ob getNewFather() oder getNewCaller() aufgerufen wird, das zurückgegebene Ergebnis ist Father . Instanz der Klasse.

Das gedruckte Ergebnis ist: FatherFather

Zu diesem Zeitpunkt scheint es keinen Unterschied zwischen new self() und new static() zu geben. Wir gehen weiter nach unten:

 Sun1  Sun2  (-> (-> (-> (->getNewCaller());看上面的代码,现在这个Father类有两个子类,由于Father类的getNewFather()和getNewCaller()是public的,所以子类继承了这两个方法。

Das gedruckte Ergebnis ist: FatherSun1FatherSun2

Wir stellen fest, dass das durch den Aufruf von getNewFather() zurückgegebene Objekt unabhängig davon, ob es Sun1 oder Sun2 ist, eine Instanz von ist Vaterklasse. getNewCaller() gibt die Instanz des Aufrufers zurück.

Das heißt, $sun1 gibt eine Instanz der Sun1-Klasse zurück und $sun2 gibt eine Instanz der Sun2-Klasse zurück.

Jetzt scheine ich den Unterschied zwischen new self() und new static() zu verstehen.

Erstens kann sich ihr Unterschied nur in der Vererbung widerspiegeln. Wenn es keine Vererbung gibt, gibt es keinen Unterschied zwischen den beiden.

Dann bleibt die von new self() zurückgegebene Instanz über Tausende von Jahren unverändert. Unabhängig davon, wer sie aufruft, wird sie eine Instanz derselben Klasse zurückgeben, während new static() vom Aufrufer bestimmt wird.

$sun1->Der Aufrufer von getNewCaller() ist $sun1, oder? $sun1 ist eine Instanz der Klasse Sun1, daher wird eine Instanz der Klasse Sun1 zurückgegeben. Der gleiche Grund für $sun2 wird nicht wiederholt.

Okay, das ist jetzt alles über den Unterschied zwischen new self() und new static() in PHP. Ich hoffe, es wird den Lesern helfen. Wenn etwas nicht stimmt, können Sie es gerne rauswerfen.

Verwandte Empfehlungen:

Was ist der Unterschied zwischen new self() und new static()

new self( ) in php ) und new static()!

Einführung in die Unterschiede und Verwendung zwischen new static() und new self()

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen new self() und new static() in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn