Использование spl_autoload () не в состоянии загрузить класс
-
02-10-2019 - |
Вопрос
Я играю с функциональностью автозагрузки 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-autoload]: запрос класса не может быть загружен в/homome/someuser/public_html/subdomains/test/contact.php в строке 5
Request.class.php определенно в/home/someUser/public_html/subdomaines/test/incluct/classes/каталог.
Что мне не хватает?
Решение
Есть комментарий (анонимный) на http://www.php.net/manual/en/function.spl-autoload-register.php#96804 Это может относиться к вашей проблеме: spl_autoload_register (), похоже, не хорошо играет с Camelcase, и в вашем случае может попытаться найти request.class.php вместо запроса ...
Другие советы
Путь, по которому, как предполагается, класс, кажется, не соответствует пути, если вы ожидаете. Сравнивать
.:/usr/lib/php:/usr/local/lib/php:/home/someuser/public_html/subdomains/test/includes/classes/
с
/home/someuser/public_html/subdomains/test/
Разница в том, что ваш класс не в includes/classes/
Поскольку ваш SPL требует этого, кроме нескольких каталогов выше.
Я получил аналогичное сообщение об ошибке, но моя проблема была другой. Мое сообщение об ошибке выглядело
PHP Fatal error: spl_autoload(): Class Lib\Lib\Regex could not be loaded in /dir1/dir2/lib/regex.php on line 49
Оказалось, я забыл удалить Lib\
от Lib\Regex
Внутри самого определения класса корпорации. У меня было что -то вроде следующего:
namespace Lib;
class Regex {
...
public static function match($pattern, $str) {
$regex = new Lib\Regex($pattern);
...
}
}