2012-01-04 54 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