2013-08-23 57 views
2

請查看以下代碼。雖然我沒有將測試方法定義爲靜態,但可以通過A :: test()來訪問。怎麼可能?它在PHP中的錯誤?爲什麼可以通過靜態調用訪問公共函數 - PHP?

class A {  
     public function test(){   
      echo __CLASS__; 
     } 
} 
A::test(); //Print 'A' 

如果我嘗試訪問test()方法內的任何公共成員,它給我一個錯誤。見下文。

class A { 
     public $name = 'jimit'; 
     public static function test(){   
         echo $this->name; 
      echo __CLASS__; 
     } 
    } 
A::test(); //Error 

請幫我澄清一下事情。

感謝, Jimit

+1

第一個示例確實會產生錯誤,您只是看不到它。在錯誤報告中啓用'E_STRICT'。 – DCoder

回答

4

這是不是一個錯誤,而是從PHP4的對象模型實現的後遺症。在當前版本中靜態調用非靜態方法會引發E_STRICT級警告。

至於第二個顯而易見的是,你的班級沒有實例,所以沒有$this來指代。

相關問題