Автозагрузка SPL и пространства имен

После просмотра веб-страницы мне удалось создать работающий SPL_Autoload и использовать в нем пространства имен. Это работает, но также выглядит немного странно для меня по сравнению со всеми примерами, которые я просматривал, и документацией. Я все использую и правильно понимаю?

$ class ищет класс с именем subdir\timer и, так как он не может найти его, переходит к SPL_autoload

$class = new subdir\timer;

Предполагается, что SPL_autoload ищет файл в папке "subdir" с файлом "timer", оканчивающимся на.php или.class.php (благодаря расширениям SPL_extensions)

Теперь я не совсем уверен, что происходит в реестре и SPL_autoload. Когда я попытался зарегистрироваться сам по себе, он не использовал _extensions, но когда я добавил spl_autoload, он работал нормально. Единственное, что я никогда не видел, чтобы это настраивалось подобным образом ни в каких примерах, поэтому я действительно подвергаю сомнению

spl_autoload_extensions(".php,.class.php");
spl_autoload_register(function($class){
    spl_autoload("$class");
});

Как вы думаете, какие-либо вещи, которые могут быть улучшены или что я сделал неправильно?

1 ответ

Решение

Я проверил это, и это работает для меня:

set_include_path(__DIR__.'PATH_TO_LIB');
spl_autoload_extensions('.php,.class.php');
spl_autoload_register();

Итак, вы установили правильный include_path?

Кроме того, для пространств имен и имен классов существует стандарт PSR-0.

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

У них также есть SplClassLoader, который немного больше, но и более гибкий, хотя мне интересно, что вы можете установить только одно расширение файла. Хорошо, но ищите PSR-0 autoloader и вы найдете больше реализаций. Кстати, есть также стандарты PSR-1 и PSR-2, которые стоит знать.

Другие вопросы по тегам