почему этот __autoload выдает предупреждение e_notice при использовании определенной константы? - PullRequest
0 голосов
/ 31 августа 2011

По какой-то причине я получаю это уведомление в приведенном ниже коде, мое приложение работает нормально и никак не влияет на остальную часть кода. Но я не могу обернуть голову вокруг этого одного уведомления. Я не вижу никаких ошибок в моем коде. Кроме того, я использую глобальную константу _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 Ответ

1 голос
/ 31 августа 2011

Очевидно: _ROOT не определен в момент вызова __autoload() (обратите внимание, что это может быть очень рано при выполнении вашего скрипта).

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

не уведомляет вас, потому что код в if никогда не выполняется, когда _ROOT не определен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...