Heim >Backend-Entwicklung >PHP-Tutorial >Warum schlagen Aufrufe nichtstatischer Methoden mit der Doppelpunktsyntax von PHP fehl?

Warum schlagen Aufrufe nichtstatischer Methoden mit der Doppelpunktsyntax von PHP fehl?

Linda Hamilton
Linda HamiltonOriginal
2024-11-21 09:53:10478Durchsuche

Why Do Calls to Non-Static Methods Using PHP's Double Colon Syntax Fail?

Aufrufen nichtstatischer Methoden mithilfe der Doppelpunktsyntax

In PHP ist es möglich, nichtstatische Methoden mithilfe der Syntax statischer Methoden aufzurufen , class::method. Warum schlagen solche Aufrufe jedoch fehl?

Betrachten Sie das folgende Beispiel:

class Teste {
    public function fun1() {
        echo 'fun1';
    }
    public static function fun2() {
        echo "static fun2";
    }
}

Der Aufruf von Teste::fun2() funktioniert, weil es eine statische Methode ist, der Aufruf von Teste::fun1 jedoch () löst einen Fehler aus.

Die Erklärung liegt im lockeren Umgang von PHP mit statischen und nicht statischen Methoden. Wenn eine nicht-statische Methode statisch aus einer nicht-statischen Methode der Klasse C heraus aufgerufen wird, verweist $this innerhalb der nicht-statischen Methode ns auf die Instanz von C.

Zum Beispiel:

class A {
    public function test() {
        echo $this->name;
    }
}

class C {
    public function q() {
        $this->name = 'hello';
        A::test();
    }
}

$c = new C;
$c->q(); // prints hello

Obwohl dies zu unerwartetem Verhalten führen kann, handelt es sich nicht um einen Fehler, es sei denn, die strikte Fehlerberichterstattung ist aktiviert. Daher wird davon abgeraten, nicht statische Methoden statisch mit Doppelpunktsyntax aufzurufen, da dies zu Fehlern oder verwirrendem Verhalten führen kann.

Das obige ist der detaillierte Inhalt vonWarum schlagen Aufrufe nichtstatischer Methoden mit der Doppelpunktsyntax von PHP fehl?. 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