Php 为什么可以';这个全局函数不能访问我的全局对象吗?

Php 为什么可以';这个全局函数不能访问我的全局对象吗?,php,global-variables,Php,Global Variables,这是全局范围内的代码: 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).'&

这是全局范围内的代码:

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>';
}
试试看{
$Core=新核心;
}捕获(例外$e){
echo“很抱歉,出现错误:
”。$e.“\n”; } 函数PP($Object){ 全球$核心; 回显“”。$Core->Tools()->DebugPrint($Object)。“”; }
我得到:

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>';
}
对非对象调用成员函数Tools()
这毫无意义。为什么
PP
函数不能访问全局
$Core
对象?

我找到了解决方案

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

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

这允许完全创建核心(使用空构造函数),因此当函数尝试执行变量时,该变量不为null,现在在Init()的范围内,不再在_construct()中

新守则:

试试看{
$Core=新核心;
$Core->Init();
}
捕获(例外$e){
echo“很抱歉,发生了一个错误:
”。$e.“\n”; } 函数PP($Object){ 全球$核心; 回显“”。$Core->Tools()->DebugPrint($Object)。“”; }
你在哪里定义$Core对象?@cyber\u新手请看第二行代码。唯一的解释是“这是全局范围内的代码:”--它不在全局范围内,这是直接在浏览器index.php中访问的整个文件。它必须是全局范围。显然,它不是整个源代码(因为没有函数调用)。您可能在调用函数之前覆盖了$Core变量,或者您可以从其他地方调用它,或者文件可能包含在函数中,在这种情况下,$Core变量将不是全局变量
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>';
}