2017-01-13 18 views
9

Pracuję nad kodem PHP.Jak wywołać metodę niestatyczną z metody statycznej tej samej klasy?

Oto przykładowy kod, aby wyjaśnić mój problem:

class Foo { 

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

Jak mogę wywołać metodę niestatyczny z metody statycznej?

Uwaga:

Obie funkcje są wykorzystywane w całej witrynie, która nie jest znana. I nie może wprowadzać żadnych zmian w statycznym/niestatycznym charakterze tych elementów.

+0

Myślę, że metody niestatyczne można wywoływać tylko przez obiekt. ponieważ jego zależność od klas i metod statycznych jest niezależna. – C2486

+0

Tak, ale w klasie, jak? Czy mam utworzyć obiekt tej samej klasy w tej samej funkcji własnej klasy? – rahulsm

+0

sprawdź to: http://stackoverflow.com/a/2396427/2815635 – C2486

Odpowiedz

21

Musisz utworzyć nowy obiekt wewnątrz metody statycznej dostępu do metod nie-statyczne wewnątrz tej klasy:

class Foo { 

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

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

https://eval.in/715502 –

1

Główną różnicą jest to, że można wywołać metody statyczne dla klasy bez konieczności stwórz obiekt tej klasy. Tak w metodzie statycznej próby

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

Ale nie widzę, w jaki sposób miałoby to żadnego sensu w dowolnym kontekście.

+0

Dzięki! Dobrze pracować. Ale czy istnieje jakaś reguła dotycząca tego, czy powinniśmy utworzyć obiekt tej samej klasy w tej samej klasie, czy też nie? – rahulsm