Heim > Backend-Entwicklung > PHP-Tutorial > Warum kann ich in PHP keine nichtstatischen Methoden mit der Doppelpunktsyntax aufrufen?

Warum kann ich in PHP keine nichtstatischen Methoden mit der Doppelpunktsyntax aufrufen?

Susan Sarandon
Freigeben: 2024-11-27 01:15:18
Original
925 Leute haben es durchsucht

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

Aufrufen nichtstatischer Methoden mit Doppelpunktsyntax

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage