Es gibt viele Funktionen in PHP, die wir nicht unterscheiden können. Was ist zum Beispiel der Unterschied zwischen new self() und new static()? Der Schlag kann natürlich nicht vollständig erklärt werden, daher wird dieser Artikel Ihnen den Unterschied zwischen new self() und new static() in PHP zeigen.
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());
Beachten Sie, dass die get_class()-Methode von Der obige Code wird verwendet. Rufen Sie den Klassennamen ab, zu dem die Instanz gehört.
Das Ergebnis hier ist: Unabhängig vom Aufruf von getNewFather() oder getNewCaller() wird eine Instanz der Father-Klasse zurückgegeben.
Das gedruckte Ergebnis ist: FatherFather
Zu diesem Zeitpunkt scheint es keinen Unterschied zwischen new self() und new static() zu geben. Machen wir weiter:
class Sun1 extends Father { } class Sun2 extends Father { } $sun1 = new Sun1(); $sun2 = new Sun2(); print get_class($sun1->getNewFather()); print get_class($sun1->getNewCaller()); print get_class($sun2->getNewFather()); print get_class($sun2->getNewCaller());
Sehen Sie sich den Code oben an. Da es sich um getNewFather() und getNewCaller() der Father-Klasse handelt öffentlich, daher erben Unterklassen diese beiden Methoden.
Das gedruckte Ergebnis ist: FatherSun1FatherSun2
Wir haben festgestellt, dass das durch den Aufruf von getNewFather() zurückgegebene Objekt unabhängig davon, ob es Sun1 oder Sun2 ist, eine Instanz der Father-Klasse ist, während getNewCaller() das zurückgibt Anruf Beispiele für
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.
Der Aufrufer von $sun1->getNewCaller() oben ist $sun1, richtig! $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.
Verwandte Empfehlungen:
Detaillierte Erklärung von new self() im php_PHP-Tutorial
new static() und new self Die Unterschiede und Gemeinsamkeiten zwischen (), staticself
Wofür wird new static() verwendet? Wie man damit umgeht
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen new self() und new static(). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!