2011-02-17 27 views
1

至於我想你既可以實例化類像這樣:引用類的類名::方法名()

$class = new className(); 

然後使用一個方法了,你就會只是做:

$class->myMethod(); 

或者,如果你想使用從類中的東西沒有實例它你可以這樣做:

className::myMethod(); 

我敢肯定,我公頃已經使用過,後者沒有任何問題,但爲什麼我會收到一個錯誤,指出:

Fatal error: Using $this when not in object context 

我的代碼我使用叫它是:

// Display lists with error message 
manageLists::displayLists($e->getMessage()); 

類如下。 。

class manageLists { 

    /* Constructor */ 

    function __construct() { 
     $this->db_connection = connect_to_db('main'); 
    } 

    function displayLists($etext = false, $success = false) { 

     // Get list data from database 
     $lists = $this->getLists(); 

     ...... 

    } 

    function getLists() { 

     ......... 

    } 

} 

我得到這個錯誤,從該行..

$lists = $this->getLists(); 

回答

2

當您使用格式ClassName::methodName()時,您正在調用方法「靜態」,這意味着您直接在類定義上調用方法,而不是在類的實例上調用方法。由於您無法從實例中調用靜態方法,並且$this代表該類的實例,因此會出現致命錯誤。

2
// Display lists with error message 
manageLists::displayLists($e->getMessage()); 

這只是調用實例方法的有效方法,如果在類的另一個實例方法內調用。否則,對displayLists的呼叫將是靜態的,並且不會有$this參考。如果您的錯誤報告足夠高,您應該看到一條警告,告訴您您正在靜態調用實例方法。

+0

非常感謝! – Brett 2011-02-17 19:52:45

0

如果您正在靜態調用方法,則不存在$this。相反的:

$lists = $this->getLists(); 

你可以這樣做:

self
$lists = self::getLists(); 

更多信息可以在這裏找到:When to use self over $this?

+0

感謝您對自己的信息....雖然只有我使用它的原因是因爲一個捷徑。 :) – Brett 2011-02-17 19:52:07