2017-01-13 4 views
9

Ich arbeite an PHP code.Wie man nicht statische Methode von der statischen Methode der gleichen Klasse nennt?

Hier ist der Beispielcode, mein Problem zu erklären:

class Foo { 

    public function fun1() { 
      echo 'non-static'; 
    } 
    public static function fun2() { 
     echo "static" ; 
     //self::fun1(); 
     //Foo::fun1(); 
    } 
} 

Wie kann ich nicht-statische Methode aus statischen Methode aufrufen?

Hinweis:

Beide Funktionen sind über die Website verwendet, die nicht bekannt ist. I kann keine Änderungen in der statischen/nicht-statischen Art von ihnen vornehmen.

+0

Ich denke, nicht-statische Methoden können nur durch Objekt aufgerufen werden. weil es abhängig von Klasse und statischen Methoden unabhängig ist. – C2486

+0

Ja, aber in der Klasse, wie? Soll ich ein Objekt derselben Klasse in derselben Funktion der eigenen Klasse erstellen? – rahulsm

+0

überprüfen Sie dies: http://Stackoverflow.com/a/2396427/2815635 – C2486

Antwort

21

Sie müssen ein neues Objekt in der statischen Methode erstellen nicht-statische Methoden innerhalb dieser Klasse zuzugreifen:

class Foo { 

    public function fun1() { 
     echo 'non-static'; 
    } 

    public static function fun2() { 
     echo (new self)->fun1(); 
    } 
} 
+0

https://eval.in/715502 –

1

Der wesentliche Unterschied wäre, dass Sie auf statische Methoden für eine Klasse aufrufen können, ohne instanziieren ein Objekt dieser Klasse. in Ihrer statischen Methode Also, versuchen Sie

Foo $objInst = new Foo(); 
$objInst->fun1(); 

Aber ich sehe nicht, wie dies keinen Sinn in jedem Kontext machen würde.

+0

Danke! Funktioniert gut. Aber gibt es eine Regel, ob wir Objekt derselben Klasse in derselben Klasse instanziieren sollen oder nicht? – rahulsm

Verwandte Themen