2014-01-13 4 views
0

Этот простой код работает на моем localhost.Функция spl_autoload_call странное поведение

function autoLoaderFunction($classname){ 
    $file = path_to_server_document_root.'classes/'.strtolower($classname).'.php'; 

     if (file_exists($file) && is_readable($file) && !class_exists($classname, false)){ 
      require_once($file); 
     }else{ 
      throw new Exception('Class cannot be found (' . $classname . ')'); 
     } 
} 
spl_autoload_register('autoLoaderFunction'); 

У меня возникли проблемы при загрузке на сервер. Все пути в порядке. но у меня много ошибок исключений. Эта функция автозагрузки, похоже, пытается загрузить все файлы, а не только классы, но функции, имена файлов и т. Д. Имеют такие ошибки, как: Исключено исключение «Исключение» с сообщением «Класс не может быть найден (language_id)» - где language_id - это URL-адрес GET Параметр , а также:, а также: Необязательное исключение «Исключение» с сообщением «Класс не может быть найден (function_display_tempalte), где function_display_tempalte - это имя функции ... Когда я удаляю новую линию Exception, весь сайт отлично обрабатывается на сервер, поэтому эта автозагрузка, похоже, правильно загружает все необходимые классы, но также и многие другие файлы, которые не являются классами . Полностью не знаю, что здесь происходит. любой совет? действительно ценят!

ответ

1

Я предполагаю, что ваш код пытается инициализировать объект language_id. Других объяснений этого поведения нет. Я проверил бы стекы Exception, брошенные в вашу функцию автозагрузки.

Возможно следующее решение является хорошей отправной также:

if (file_exists($file) && is_readable($file) && !class_exists($classname, false)){ 
    require_once($file); 
}else{ 
    if($classname === 'language_id') { 
     var_dump(debug_backtrace()); 
    } 
    throw new Exception('Class cannot be found (' . $classname . ')'); 
} 

Однако, отладчик может сделать вашу жизнь проще, как только вы установите его.

+0

Это дает исключение. когда я добавил свой код, например: array (4) { ["file"] => string (50) "application_top.php" ["line"] => int (114) [ "арг"] => массив (1) { [0] => строка (48) "main_func.php" } [ "функции"] => строка (7) "требует" }. Таким образом, это означает, что эта функция автозагрузки срабатывает также, когда im использует эту строку кода: require ('main_func.php'); в файле application_top.php – abiku

+0

да, похоже. – hek2mgl

Смежные вопросы