Я беру на себя проект, который использует пользовательскую структуру. Встроенный, вы найдете наиболее часто используемую функцию автозагрузки PHP в мире:
function __autoload($class_name) {
include APP_PATH . '/model/' . $class_name . '.php';
}
Теперь я хотел бы установить композитор. Как сделать, чтобы автозагрузить классы композитора только после того, как прежняя функция автозагрузки не смогла найти загружаемый класс?
Оказывается, есть способ зарегистрировать функции автозагрузчика как стек функций, которые будут вызываться до тех пор, пока не удастся добиться успеха. Последний параметр добавляет функцию автозагрузчика в текущий стек.
spl_autoload_register('app_autoload', false, true);
Но для того, чтобы быть уложенным, необходимо, конечно, не использовать магический синтаксис (__autoload()
), а также быть признанным " __autoload()
", функция не должна включать файл. Поэтому я немного изменил исходную функцию:
function app_autoload($class_name) {
$file = APP_PATH . '/model/' . $class_name . '.php';
if (file_exists($file)) {
include $file;
}
return false;
}
И это работало как прелесть.