Heim > Artikel > Backend-Entwicklung > Der Unterschied zwischen new self() und new static() in PHP objektorientiert
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 werden, um statisch auf die aktuelle Klasse zu verweisen, je nachdem zur Definition der aufgerufenen Methode Ändern Sie in der Klasse, in der sie sich befindet, die Methode echoProperty der Klasse A oben 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 im ersten Beispiel oben gezeigte Unterklasse die statischen Eigenschaften überschreibt Verwenden Sie die geerbte Methode der übergeordneten Klasse, um 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 auf dieselbe zurückgegebene Klasse zu verweisen von get_called_class(), also der Klasse, die aktuell die statische Methode aufruft, ist dieses Schlüsselwort 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
Für Weitere PHP-bezogene Kenntnisse finden Sie auf der PHP-Chinese-Website!
Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen new self() und new static() in PHP objektorientiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!