Я играю вокруг с функциональностью автозагрузки SPL и, кажется, пропускаю что-то важное, поскольку я в настоящее время не могу заставить это работать. Вот отрывок, который я в настоящее время использую:
// ROOT_DIRECTORY translates to /home/someuser/public_html/subdomains/test
define('ROOT_DIRECTORY', realpath(dirname(__FILE__)));
define('INCLUDE_DIRECTORY', ROOT_DIRECTORY . '/includes/classes/');
set_include_path(get_include_path() . PATH_SEPARATOR . INCLUDE_DIRECTORY);
spl_autoload_extensions('.class.php, .interface.php, .abstract.php');
spl_autoload_register();
Когда я echo get_include_path()
Я действительно получаю путь, который я ожидал:
// Output echo get_include_path();
.:/usr/lib/php:/usr/local/lib/php:/home/someuser/public_html/subdomains/test/includes/classes/
Однако, когда я выполняю код, я получаю это сообщение об ошибке:
Фатальная ошибка: spl_autoload () [function.spl-автозагрузка]: Запрос Класса не мог быть загружен в/home/someuser/public_html/subdomains/test/contact.php на строке 5
Request.class.php находится определенно в/home/someuser/public_html/subdomains/test/includes/classes/каталоге.
Что я пропускаю?
Есть комментарий (анонимный) к http://www.php.net/manual/en/function.spl-autoload-register.php#96804 , который может относиться к вашей проблеме: spl_autoload_register (), похоже, не очень хорошо работает с camelcase, и в вашем случае вы можете попытаться найти request.class.php вместо Request ...
Путь, где должен находиться класс, похоже, не совпадает с путем, где вы их ожидаете. Сравните
.:/usr/lib/php:/usr/local/lib/php:/home/someuser/public_html/subdomains/test/includes/classes/
с
/home/someuser/public_html/subdomains/test/
Разница в том, что ваш класс находится не в includes/classes/
, как того требует SPL, а несколькими каталогами выше.