为什么这个__autoload在使用定义的常量时会给我e_notice警告?

时间:2011-08-31 14:20:38

标签: php windows error-handling

我出于某种原因在下面的代码中得到了这个通知,我的应用程序运行正常并且它不会以任何方式影响其余的代码。但我无法绕过这一个通知。我的代码中没有看到任何错误。另外,我在其他地方使用_ROOT全局常量,并没有给我任何关于它未定义的通知。有趣的是,if (defined('_ROOT'))评估为真,因为它应该是,因为很明显它确实是定义的。

代码:

<?php

session_start();

//define('_DEBUG', 'YES');
define('_ROOT', dirname(__FILE__), true);

require_once _ROOT.'/config/config.php'; //no notice

function __autoload($class_name) {
   if (defined('_DEBUG')) { echo '__autoload called<br>'; }
   if (defined('_ROOT')) { echo 'root exists'._ROOT.'<br>'; } //doesn't give me a notice
   if (file_exists(_ROOT.'/app/core/'.$class_name.'.php')) { //gives me a notice
      require_once _ROOT.'/app/core/'.$class_name.'.php'; //doesn't give me a notice
   }
}

$app = new Application();
echo $app->run();

注意:Notice: Use of undefined constant _ROOT - assumed '_ROOT' in path\to\index.php on line 13

1 个答案:

答案 0 :(得分:1)

很明显:调用_ROOT时没有定义__autoload()(请注意,这可能是在执行脚本时很早)。

if (defined('_ROOT')) { echo 'root exists'._ROOT.'<br>'; }

没有给您通知,因为if中的代码在_ROOT未定义时永远不会执行。