У меня странная проблема. У меня есть статический метод, который загружает классы (load_library). Когда он загружает определенный класс, он дает мне фатальную ошибку «невозможно переопределить класс», но при проверке, существует ли класс прямо перед использованием метода load_library для его загрузки, он говорит, что класс не существует. Метод load_library
работает в других местах без таких ошибок.
Если я возьму вызов load_library, он скажет, что не может найти класс, когда класс фактически используется несколькими строками позже. Еще более странно, что если я вместо этого уберу свою зарегистрированную функцию класса autoload
, все будет отлично работать, даже если эта функция autoload
даже не проверяет каталог, в котором находится класс, который я пытаюсь загрузить.
Это сложная проблема, связанная с большим количеством файлов, поэтому трудно опубликовать код, но не кажется ли вам, что эта проблема кому-то знакома?
Мой метод load_library:
public static function load_library($name) {
if (!class_exists($name)) {
if (file_exists('application/libraries/' . $name . '.php')) {
include('application/libraries/' . $name . '.php');
} else {
trigger_error('Request made for non-existant library ('.$name.').', E_USER_ERROR);
}
}
}
Мой вызов метода load_library:
lev::load_library('lev_unit_tester/lev_base_test');
Мой зарегистрированный метод автозагрузки:
public static function autoloader($name) {
if (class_exists($name)) return;
if (file_exists('application/libraries/' . $name . '.php')) {
include('application/libraries/' . $name . '.php');
}
}
Класс, который я пытаюсь загрузить (именно здесь происходит ошибка):
abstract class lev_base_test {
}
Фактическое сообщение об ошибке:
Неустранимая ошибка: невозможно переопределить класс lev_base_test в /some/path/application/libraries/lev_unit_tester/lev_base_test.php в строке 5