require_once'modules/logger.php';
$Logger = new Logger();
require_once 'templates/list.php';
$Templates = new templatesList();
require_once 'widgets/list.php';
$Widgets = new widgetsList();
我在$Logger
和templates/list.php
中使用widgets/list.php
。
我在$Templates
中使用/widgets/list.php
。
上面的代码抛出了这个错误:
注意:未定义的变量:
Logger
in 第99行.../templates/list.php
致命错误:调用成员函数toLog()
在非对象中 第99行.../templates/list.php
UPD 这是第99行:
$Logger->toLog( $contentData );
答案 0 :(得分:2)
如果要在对象方法中使用$Logger
,则需要在该方法中将其标记为全局。如果不这样做,您将最终创建一个新的本地$ 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);
答案 1 :(得分:0)
你确定你没有在/templates/list.php的开头某处取消$ Logger吗?
在初始化之后和使用之前尝试var_dumping()$ Logger。