Php 为什么在使用定义的常量时,自动加载会给我e_通知警告?

Php 为什么在使用定义的常量时,自动加载会给我e_通知警告?,php,windows,error-handling,Php,Windows,Error Handling,出于某种原因,我在下面的代码中得到了这个通知,我的应用程序运行良好,它不会以任何方式影响代码的其余部分。但我不能把我的头绕在这一个通知上。我在代码中没有看到任何错误。另外,我在其他地方使用了_根全局常数,它没有给我任何关于它未定义的通知。有趣的是,if(defined(“'u ROOT'))的计算结果是正确的,因为显然它确实是被定义的 代码: 很明显:\u ROOT在调用\u autoload()时没有定义(请注意,这可能是在脚本执行的早期) if(已定义(“\u ROOT”){echo“ROO

出于某种原因,我在下面的代码中得到了这个通知,我的应用程序运行良好,它不会以任何方式影响代码的其余部分。但我不能把我的头绕在这一个通知上。我在代码中没有看到任何错误。另外,我在其他地方使用了_根全局常数,它没有给我任何关于它未定义的通知。有趣的是,
if(defined(“'u ROOT'))
的计算结果是正确的,因为显然它确实是被定义的

代码:


很明显:
\u ROOT
在调用
\u autoload()
时没有定义(请注意,这可能是在脚本执行的早期)

if(已定义(“\u ROOT”){echo“ROOT存在”。\u ROOT.
;}

不会给您通知,因为在未定义
\u ROOT
时,
if
中的代码从未执行。

在我的本地环境中使用PHP5.3.5时,此代码运行良好。您可能已经检查过了,但是您能检查一下这行是否确实触发了通知,而不是其他的吗?我经常检查不同的文件/行:)此外,尝试使用变量,例如
$file=\u ROOT./app/core/'.$class\u name..php'
如果(file\u存在($file))
。因为这不在第18行,您可以发布所有18行吗?您确定正在查找正确的文件吗?另外,在第18行重新键入_ROOT-可能其中一个操作系统是cirylic或其他看起来像O但不是同一个字符的操作系统。我不知道为什么会是这样。但是,您是否可以将
if(文件存在…{require\u once…}
代码放入
if(定义的('u根'))
条件中?对于这样一个奇怪的错误,这不是一个理想的解决方案,但我看不出有任何理由要打印通知。@Darhazer:我100%确定这是正确的一行,当我收到通知时,我会把整个文件放在这里home@Pete171天哪,我把
if(文件存在…
放入
if(已定义)
而且它没有给我任何通知lol…如果他的代码在同一个文件中,你能解释一下为什么
\uu autoload()
定义之前运行吗。由于调用了
\uuu autoload()
,因此必须加载代码。
<?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();
if (defined('_ROOT')) { echo 'root exists'._ROOT.'<br>'; }