Heim >Backend-Entwicklung >PHP-Tutorial >Warum kann ich nicht-statische PHP-Methoden nicht mit der Doppelpunkt-Syntax aufrufen?

Warum kann ich nicht-statische PHP-Methoden nicht mit der Doppelpunkt-Syntax aufrufen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-03 21:13:12381Durchsuche

Why Can't I Call Non-Static PHP Methods Using the Double-Colon Syntax?

Aufrufen nichtstatischer Methoden mit Doppelpunktsyntax

In PHP ist es üblich, statische Methoden mit der Doppelpunktsyntax aufzurufen. wie ClassName::methodName(). Der Versuch, eine nicht-statische Methode mit dieser Syntax aufzurufen, kann jedoch zu Verwirrung führen.

Warum die Doppelpunktsyntax für nicht-statische Methoden nicht funktioniert

Im Gegensatz zu statischen Methoden erfordern nicht statische Methoden zum Betrieb eine Instanz der Klasse. Wenn eine nicht statische Methode mit ClassName::methodName() aufgerufen wird, interpretiert PHP sie als statische Methode, was für Methoden, die bestimmte Instanzvariablen oder Zugriff auf das Schlüsselwort $this benötigen, keinen Sinn ergibt.

PHPs Loose Typing

PHP behandelt statische und nicht statische Methoden unterschiedlich, es ist jedoch wichtig zu beachten, dass PHP in dieser Hinsicht relativ locker ist. Auch wenn der Aufruf einer nicht statischen Methode mit Doppelpunkt-Syntax technisch falsch ist, kann PHP dies unter bestimmten Umständen dennoch zulassen.

Dieses Verhalten kann jedoch zu unerwarteten Ergebnissen oder Fehlern führen, insbesondere bei Verwendung einer strikten Fehlerberichterstattung . In solchen Fällen gibt PHP einen Fehler aus, der darauf hinweist, dass die nicht-statische Methode für ein Objekt aufgerufen werden muss.

Referenzierung von $this aus nicht-statischen Methoden

Interessant PHP ermöglicht den statischen Aufruf einer nicht statischen Methode aus einer anderen nicht statischen Methode derselben Klasse. In diesem Fall verweist das Schlüsselwort $this in der aufgerufenen Methode auf die Instanz der aufrufenden Klasse.

Betrachten Sie beispielsweise den folgenden Code:

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

In diesem Beispiel ist die Die test()-Methode der Klasse A wird statisch von der q()-Methode der Klasse C aufgerufen. Das Schlüsselwort $this in test() verweist auf die Instanz von C ($c), sodass der Code auf die Namenseigenschaft zugreifen und drucken kann „Hallo.“

Das obige ist der detaillierte Inhalt vonWarum kann ich nicht-statische PHP-Methoden nicht mit der Doppelpunkt-Syntax aufrufen?. 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