Heim >Backend-Entwicklung >PHP-Tutorial >Der Unterschied zwischen new self() und new static() in PHP
Ob new static() oder new self(), ein neues Objekt ist neu. Dieser Artikel stellt Ihnen hauptsächlich den Unterschied zwischen new self() und new static() in der objektorientierten PHP-Umgebung vor. Lassen Sie uns gemeinsam einen Blick darauf werfen.
Der Unterschied ist wie folgt:
Erklären Sie zunächst die Schlussfolgerung. In PHP zeigt self auf die Klasse, die die aktuell aufgerufene Methode definiert, und static zeigt auf die Klasse, die die aktuelle statische Methode aufruft .
Als nächstes wird ein Beispiel verwendet, um das obige Ergebnis zu beweisen
class A { public static $_a = 'Class A'; public static function echoProperty() { echo self::$_a . PHP_EOL; } } class B extends A { public static $_a = 'Class B'; } $obj = new B(); B::echoProperty();//输出 Class A
Der Grund dafür ist, dass self:: oder __CLASS__ verwendet wird, um statisch auf die aktuelle Klasse zu verweisen Ändern Sie in der Klasse, in der die Methode aufgerufen wird, die Methode echoProperty der obigen Klasse A wie folgt:
class A { public static $_a = 'Class A'; public static function echoProperty() { echo static::$_a . PHP_EOL; } } //再次调用B::echoProperty将输出 'CLASS B'
Um zu vermeiden, dass die Unterklasse die statischen Eigenschaften der übergeordneten Klasse überschreibt Im ersten Beispiel oben sehen Sie: Verwenden Sie geerbte Methoden, um weiterhin auf die statischen Eigenschaften der übergeordneten Klasse zuzugreifen. PHP5.3 fügt eine neue Syntax hinzu: Verwenden Sie das Schlüsselwort static anstelle des Schlüsselworts self, um einen statischen Punkt zu erstellen und von dort zurückzukehren get_called_class(). Dieselbe Klasse, also die Klasse, die gerade die statische Methode aufruft, dieses Schlüsselwort ist auch für den Zugriff auf die statische Methode gültig.
Das folgende Beispiel veranschaulicht den Unterschied zwischen new self() und new static() besser (letzteres verwendet die späte statische Bindung von PHP, um auf die aktuelle Klasse der aufrufenden Methode zu verweisen)
class A { public static function get_self() { return new self(); } public static function get_static() { return new static(); } } class B extends A {} echo get_class(B::get_self()); // A echo get_class(B::get_static()); // B echo get_class(A::get_self()); // A echo get_class(A::get_static()); // A
Verwandte Empfehlungen:
Überblick über die objektorientierten PHP-Designprinzipien
Praktische Grundkenntnisse über objektorientiertes PHP
Beispiel-Tutorial für ein grundlegendes objektorientiertes PHP-Konzept
Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen new self() und new static() in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!