开发者

why is this __autoload giving me e_notice warning when using a defined constant?

I'm getting for some reason this notice in the code bellow, my application is working fine and it's not affecting the rest of code in any way. But I can't wrap my head around this one notice. I don't see any errors in my code. Also, I'm using _ROOT global constant in other places and it's not giving me any notice about it being undefined. Interestingly the if (defined('_ROOT')) evaluates to true as it's supposed to be, since obviously it's really for sure defined.

Code:

<?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: Notice: Use 开发者_开发知识库of undefined constant _ROOT - assumed '_ROOT' in path\to\index.php on line 13


It's obvious: _ROOT is not defined at the moment __autoload() is called (note that this can be very early in the execution of your script).

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

doesn't give you a notice because the code within the if is never executed when _ROOT is not defined.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜