2010-11-02 105 views
0

爲什麼我得到這個錯誤?:PHP 5和嚴格的標準錯誤

嚴格的標準:非靜態方法Hello_Misc :: fix_protocol()不應該被靜態調用,在測試不兼容情況下假設$此。上線834 PHP

834:

$this->my_url = Hello_Misc::fix_protocol($my, 1); 

我使用最新版的PHP(> = 5.1.3),但在以前的版本(< = 5.1.2),它的工作(ref)。

回答

4

static關鍵字是關鍵!需要聲明的方法爲靜態:

class Hello_Misc { 

    static public function fix_protocol($p1, $p2) { 
     // code 
    } 

} 

但是,你這樣做(你應該),你必須確保你沒有在這個方法中使用的對象上下文(即$this)。如果你這樣做,你必須稍微檢查一下你的設計。

+0

確定現在可以正常工作:)。但爲什麼它可以在PHP 5的最早版本中運行? – xRobot 2010-11-02 22:48:07

+0

@xRobot:您必須禁用了E_STRICT錯誤。 – webbiedave 2010-11-02 22:55:26

+0

您可能只是將您的'error_reporting'設置設置爲忽略'E_STRICT'錯誤。儘管我不鼓勵你禁用它,因爲根據一般編程標準和指南,警告旨在使你的代碼*可以接受。例如:在每個示例中,以C++靜態調用非靜態方法將導致編譯器失敗並吐出錯誤。 – netcoder 2010-11-02 22:55:58