Эффективные стратегии автоматической загрузки и именования 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-проверки, проверки строк и сканирования каталогов кажутся мне неэффективными, и я хотел бы улучшить их.

Мне очень любопытно, какие стратегии именования файлов и автозагрузки могут использовать другие разработчики. Я специально ищу хорошие методы для эффективной автозагрузки, а не альтернативы автозагрузке.

Ответы на вопрос(3)

Ваш ответ на вопрос