2017-01-13 133 views
9

我正在研究PHP的代碼。如何從同一類的靜態方法調用非靜態方法?

下面是示例代碼來解釋我的問題:

class Foo { 

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

我如何可以調用從靜態方法非靜態方法?

注:

兩個功能在整個網站,這是不知道使用。 I 無法對它們的靜態/非靜態性質進行任何更改。

+0

我認爲非靜態方法只能由對象調用。因爲它依賴於類和靜態方法是獨立的。 – C2486

+0

是的,但是在課堂上,怎麼樣?我應該在同一個類的函數中創建同一個類的對象嗎? – rahulsm

+0

檢查此:http://stackoverflow.com/a/2396427/2815635 – C2486

回答

21

必須靜態方法來訪問類中沒有靜態方法中創建一個新的對象:

class Foo { 

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

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

https://eval.in/715502 –

1

的主要區別是,你可以調用一個類的靜態方法,而不必實例化該類的一個對象。 所以,在靜態方法嘗試

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

但我不認爲這將如何作出任何意義在任何情況下。

+0

謝謝!工作正常。但是我們是否應該在同一個類中實例化同一個類的對象還有什麼規則? – rahulsm

相關問題