2012-01-04 78 views
5

當啓動類時,我的PHP類構造函數似乎沒有被調用。這是我的構造是什麼樣子:實例化時未調用PHP構造函數

public function __contruct() 
{ 
    $GLOBALS['page_content'] .= "<p>Constructor entered.</p>\r\n"; 

    try 
    { 
    $this->ConstructorBase(); 
    } 
    catch (Exception $e) 
    { 
    throw new Exception(
     "Error in ".__FILE__."(".__LINE__."): Constructor failed.", 
     CLoginError::ERROR_CANNOT_INSTANTIATE, $e); 
    } 
} 

在同一個文件之後,在全球範圍內,我試圖將類實例:

$Login = new CLogin(); 

然而,當我檢查$GLOBALS['page_content'],實例化後類,它是空的,就好像構造函數從未被調用一樣。奇怪的是我可以調用公共成員函數。如果你想看到它,完整的源代碼被張貼在這裏:

http://pastebin.com/D95YnUmS

+1

其錯誤你在那裏;) – Jakub 2012-01-04 20:42:42

+1

也GLOBALS和構造函數中的異常是不好的做法 – meze 2012-01-04 20:43:41

+1

異常在構造函數中根本不是壞習慣,它實際上建議在任何情況下trigger_error,並且是唯一有效的機制來捕獲錯誤這是在創建對象時發生的。我同意在全球範圍內,不要在任何地方使用GLOBAL ...不好的壞做法。 – 2012-01-04 20:45:46

回答

50

你命名你的函數__contruct()它應該是__construct()。這是一個非常常見的錯誤,你應該可以睡一會兒。

+7

認爲這個「印刷錯誤」讓我在過去的3周內停滯不前。^_^;;我想我會稱之爲地獄的錯字。活到老,學到老。謝謝你的幫助。我很高興再次向前邁進,至少我在這個過程中學習了很多有關調試PHP的知識。 – 2012-01-04 20:52:15

+0

是的,如果一個函數沒有被調用(無論是在對象實例化還是在常規的函數調用中),假設沒有錯誤記錄,很可能您錯誤地輸入了函數名稱(在調用或在函數聲明中)。下一次祝你好運:D – 2012-01-04 20:56:38

+0

剛剛花了近5分鐘盯着上面的那兩個,想知道......有什麼不同。如果你現在像我一樣被燒燬,第一個人就會漏掉's'。 – teynon 2012-11-09 06:26:38

相關問題