Heim > Backend-Entwicklung > PHP-Tutorial > Der Unterschied zwischen new self() und new static() in PHP objektorientiert

Der Unterschied zwischen new self() und new static() in PHP objektorientiert

藏色散人
Freigeben: 2023-04-07 17:42:01
nach vorne
2834 Leute haben es durchsucht

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
Nach dem Login kopieren

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'
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Verwandte Etiketten:
php
Quelle:segmentfault.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage