Heim >Backend-Entwicklung >PHP-Tutorial >Warum kann ich in PHP keine nichtstatischen Methoden mit der Doppelpunktsyntax aufrufen?
In PHP können statische Methoden mithilfe des Klassennamens gefolgt vom Bereichsauflösungsoperator (::) aufgerufen werden. . Allerdings ist es im Allgemeinen nicht möglich, nicht statische Methoden auf die gleiche Weise aufzurufen.
Nichtstatische Methoden mit Doppelpunktsyntax
Der folgende Codeausschnitt versucht dies Rufen Sie eine nicht statische Methode, fun1, mit der Doppelpunktsyntax auf:
class Teste { public function fun1() { echo 'fun1'; } public static function fun2() { echo "static fun2" ; } } Teste::fun1(); // why? Teste::fun2(); // ok - is a static method
Dieser Code führt zu einer Fehler, da auf nicht statische Methoden nicht direkt über den Klassennamen zugegriffen werden kann.
Grund für die Einschränkung
PHP verwendet Loose Typing für statische und nicht statische Methoden. Wenn eine nicht statische Methode statisch aufgerufen wird, verweist das Schlüsselwort $this in dieser Methode nicht auf eine Instanz der Klasse. Dieses lockere Verhalten kann zu inkonsistentem und möglicherweise fehlerhaftem Code führen.
Statische Methodenvarianten
Die Doppelpunktsyntax ist nur für den Aufruf statischer Methoden zulässig. Hier ist ein Beispiel:
class StaticExample { public static function staticMethod() { echo "static method"; } } StaticExample::staticMethod(); // valid
Innerhalb nichtstatischer Methoden
Es ist möglich, eine nichtstatische Methode statisch aus einer nichtstatischen Methode derselben heraus aufzurufen Klasse. In solchen Fällen verweist $this innerhalb der aufgerufenen Methode immer noch auf die richtige Objektinstanz.
class A { public function nonStaticMethod() { echo $this->name; } } class C { public function callNonStatic() { $this->name = 'Example'; A::nonStaticMethod(); // valid } } $c = new C; $c->callNonStatic(); // prints Example
Das obige ist der detaillierte Inhalt vonWarum kann ich in PHP keine nichtstatischen Methoden mit der Doppelpunktsyntax aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!