Heim >Backend-Entwicklung >PHP-Tutorial >Warum kann ich nicht-statische PHP-Methoden nicht mit dem Doppelpunkt-Operator (::) aufrufen?
Grundlegendes zum Aufruf nicht-statischer Methoden mit Doppelpunkt (::)
Beim Versuch, eine nicht-statische Methode mit der Syntax von aufzurufen Wenn Sie statische Methoden (class::method) verwenden, kann es zu einem Fehler kommen. Im Gegensatz zu einem Konfigurationsproblem ist dieses Verhalten dem PHP-Design inhärent.
In PHP erfordern nicht-statische Methoden, dass zuerst eine Instanz erstellt wird, um aufgerufen zu werden. Der Fehler tritt auf, weil bei Verwendung der class::method-Syntax keine Instanz explizit bereitgestellt wird.
Unterscheidung zwischen statischen und nichtstatischen Methoden
Statische Methoden können ohne aufgerufen werden eine Instanz der Klasse, während nicht statische Methoden eine Instanz erfordern. Diese Unterscheidung wird im folgenden Beispiel deutlich:
class Teste { public function fun1() { echo 'fun1'; } public static function fun2() { echo "static fun2" ; } } Teste::fun2(); // This is valid because fun2 is a static method Teste::fun1(); // This will generate an error because fun1 is not a static method
Inkonsistentes Verhalten
PHP zeigt jedoch einiges inkonsistentes Verhalten bei nicht statischen Methoden, die statisch aufgerufen werden. Wenn eine nicht statische Methode statisch aus einer nicht statischen Methode derselben Klasse aufgerufen wird, verweist $this innerhalb der nicht statischen Methode auf die aktuelle Instanz der Klasse.
class A { public function test() { echo $this->name; } } class C { public function q() { $this->name = 'hello'; A::test(); } } $c = new C; $c->q(); // This will print 'hello'
Dieses Verhalten kann als fehlerhaft angesehen werden, wenn die strikte Fehlerberichterstattung aktiviert ist.
Fazit
Aufruf nichtstatischer Methoden mit der Syntax von Von statischen Methoden wird generell abgeraten. Dies kann zu unerwartetem Verhalten oder Fehlern führen. Stattdessen wird empfohlen, die richtige Syntax zum Aufrufen nicht statischer Methoden zu verwenden. Dazu gehört das Erstellen einer Instanz der Klasse und das anschließende Aufrufen der Methode für diese Instanz.
Das obige ist der detaillierte Inhalt vonWarum kann ich nicht-statische PHP-Methoden nicht mit dem Doppelpunkt-Operator (::) aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!