Эффективные стратегии автоматической загрузки и именования PHP
Как и большинство веб-разработчиков в наши дни, я полностью наслаждаюсь преимуществами надежной архитектуры MVC для веб-приложений и сайтов. При выполнении MVC с PHP автозагрузка, очевидно, очень удобна.
Я стал поклонникомspl_autoload_register
более простого определения одного__autoload()
функция, поскольку это, очевидно, более гибко, если вы включаете различные базовые модули, каждый из которых использует свою собственную автозагрузку. Тем не менее, я никогда не чувствовал себя прекрасно в отношении функций загрузки, которые я пишу Они включают в себя много проверок строк и сканирование каталогов для поиска возможных классов для загрузки.
Например, допустим, у меня есть приложение, базовый путь которого определен какPATH_APP
и простая структура с каталогами с именемmodels
, views
а такжеcontrollers
, Я часто использую структуру именования, по которой файлы называютсяIndexView.php
а такжеIndexController.php
внутри соответствующего каталога, и модели обычно не имеют конкретной схемы по умолчанию. Я мог бы иметь функцию загрузчика для этой структуры, как это, который регистрируется сspl_autoload_register
:
public function MVCLoader($class)
{
if (file_exists(PATH_APP.'/models/'.$class.'.php')) {
require_once(PATH_APP.'/models/'.$class.'.php');
return true;
}
else if (strpos($class,'View') !== false) {
if (file_exists(PATH_APP.'/views/'.$class.'.php')) {
require_once(PATH_APP.'/views/'.$class.'.php');
return true;
}
}
else if (strpos($class,'Controller') !== false) {
if (file_exists(PATH_APP.'/controllers/'.$class.'.php')) {
require_once(PATH_APP.'/controllers/'.$class.'.php');
return true;
}
}
return false;
}
Если после этого он не найден, у меня может быть другая функция для сканирования подкаталогов в каталоге моделей. Однако все операции if / else-проверки, проверки строк и сканирования каталогов кажутся мне неэффективными, и я хотел бы улучшить их.
Мне очень любопытно, какие стратегии именования файлов и автозагрузки могут использовать другие разработчики. Я специально ищу хорошие методы для эффективной автозагрузки, а не альтернативы автозагрузке.