这是全局范围内的代码:
try {
$Core = new Core;
} catch(Exception $e) {
echo 'We're Sorry, but an error has occurred: <br /> '.$e. "n";
}
function PP($Object){
global $Core;
echo '<pre>'.$Core->Tools()->DebugPrint($Object).'</pre>';
}
我得到:
在非对象上调用成员函数Tools()
这毫无意义。为什么PP
函数不能访问全局$Core
对象?
我找到了解决方案。
上面的源代码是index.php文件的全部内容,直接加载到浏览器中。当然还有更多的代码,但上面的代码绝对在全局范围内。此外,没有其他代码在全局范围内运行,因此Core不能被覆盖。
Core对象构造函数开始执行应用程序并调用其他核心方法,这些方法调用其他方法、自动加载类、use类等。但是,由于其中一个类内部对PP()的调用发生在Core构造函数完成之前,因此Core对象在构造函数完成执行之前一直为null(只有在应用程序完全完成时才会发生)。解决这个问题的方法是将Core类的所有初始化从构造函数中移到init()方法中。
这允许完全创建Core(使用空构造函数),因此当函数尝试执行变量时,变量不为null,现在在Init()的范围内,不再在__construct()中。
新代码:
try{
$Core = new Core;
$Core->Init();
}
catch(Exception $e){
echo 'We're Sorry, but an error has occured: <br /> '. $e. "n";
}
function PP($Object){
global $Core;
echo '<pre>'.$Core->Tools()->DebugPrint($Object).'</pre>';
}