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!