Автозагрузка 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, которые стоит знать.