0
require_once'modules/logger.php';                                                         
$Logger = new Logger();

require_once 'templates/list.php';
$Templates = new templatesList();

require_once 'widgets/list.php';
$Widgets = new widgetsList();

我使用$Loggerintemplates/list.php和 in widgets/list.php$Templates我用在/widgets/list.php.

上面的代码抛出这个错误:

注意:未定义变量:Logger.../templates/list.php第 99 行致命错误:在第 99 行调用 toLog()非对象上 .../templates/list.php 的成员函数

UPD 这是第 99 行:

$Logger->toLog( $contentData );
4

2 回答 2

2

如果要$Logger在对象方法中使用 from,则需要在该方法中将其标记为全局。如果不这样做,您最终将创建一个新的本地 $Logger 变量。我怀疑这就是问题所在。例如:

class templatesList {
    public function __construct() {
        global $Logger;
        //now we can use $logger.
    }
}

但是,将 $Logger 传递给每个需要使用它的对象的构造函数可能会更好。全局变量通常不被认为是好的做法。

class templatesList {
    protected $Logger;
    public function __construct(Logger $Logger) {
        //now we can use $logger.

        //store reference we can use later
        $this->Logger = $Logger;
    }

    public function doSomething() {
        $this->Logger->log('something');
    }
}

new templatesList($Logger);
于 2009-08-27T10:42:36.003 回答
0

您确定您没有在 /templates/list.php 的开头某处取消设置 $Logger 吗?

在初始化之后和使用之前尝试 var_dumping() $Logger。

于 2009-08-27T10:42:08.393 回答