0

这是全局范围内的代码:

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对象?

4

1 回答 1

0

我找到了解决方案。

上面的源码是 index.php 文件的全部内容,直接在浏览器中加载。当然还有更多的代码,但上面的代码绝对是在全局范围内。此外,没有其他代码在全局范围内运行,因此无法覆盖 Core。

Core 对象构造函数开始应用程序执行并调用其他核心方法,这些方法调用其他方法、自动加载类、使用类等。但是,由于在其中一个类中对 PP() 的调用发生在 Core 构造函数完成之前,Core 对象在构造函数完成执行之前保持为空(这仅在应用程序完全完成时发生)。解决这个问题的方法是将所有 Core 类的初始化移出构造函数,并移到 init() 方法中。

这允许完全创建核心(使用空的构造函数),因此当函数尝试执行它时变量不为空,现在在 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>';
}
于 2013-08-31T13:56:19.933 回答