Автозагрузка PHP перехватывает новое исключение

У меня есть следующий код, определенный для автоматического включения моих классов:

spl_autoload_register(function($class) {
   require $class . '.php';
});

Затем у меня есть сторонний класс (в пространстве имен помощников) со следующей строкой:

throw new Exception('...');

Проблема в том, что функция автозагрузки пыталась найти файл с именем helpers\Exception.php. Поэтому я изменил свою функцию выше на:

spl_autoload_register(function($class) {
    if ($class != 'helpers\Exception') {
        require $class . '.php';
    }
}

Но затем он выдает исключение, говорящее, что класс helpers\Exception не найден. Я был бы признателен, если бы кто-нибудь помог показать мне, как я могу заставить его просто отображать исходное исключение, созданное в стороннем классе.


person nfplee    schedule 06.08.2014    source источник


Ответы (2)


Мне удалось заставить это работать. Мне пришлось добавить следующее в начало класса:

use Exception;

Другое решение - изменить:

throw new Exception('...');

to:

throw new \Exception('...');

Но это решение требует изменения всех вхождений.

person nfplee    schedule 06.08.2014

Вам нужно экранировать символ \. Попробуйте это: helpers\\Exception

person Tom    schedule 06.08.2014
comment
Спасибо, но это не имело значения. Проблема в том, что он пытается найти несуществующий класс Exception. - person nfplee; 06.08.2014
comment
Вы уверены, что класс включен? Если это не так, вы должны включить его :) - person Tom; 07.08.2014
comment
задача решена. Пожалуйста, смотрите мой ответ для решения. Спасибо, в любом случае. - person nfplee; 07.08.2014