Как сделать автозагрузку классов из разных папок?

Все php-файлы с классами хранятся в одной папке с путём прописанным в константе CLASSES
// Сам автозагрузчик. 
spl_autoload_register(function ($className) {
    include CLASSES. '/' . $className . '.php';
});

// Из роутера приходят данные какой класс нужен
$actionClass = $route->handler;

// Создаём объект
$action = new $actionClass();


Вопрос: что делать если есть желание классы Model, View, Controller разложить по разным папкам, я смотрел Yii2 но не очень понял как сделана загрузка классов в нём, т.к. там именно по папкам разложено всё.

То ли для этого пространва имён надо вводить, но я не очень понимаю как именно?
  • Вопрос задан
  • 714 просмотров
Решения вопроса 2
@D3lphi
Да сколько можно велосипеды писать? Composer есть, я же уже говорил вам!

Используйте стандарт автозагрузки psr-4. Для этого следует использовать пространства имен (namespace'ы).
Таким образом, класс с полным именем App\Controllers\DefaultController (Где App\Controllers - неймспейс, а DefaultController - имя класса) должен лежать в директории app/controllers и иметь имя DefaultController.php.
Ответ написан
DevMan
@DevMan
как уже писали, лучше всего воспользоваться composer/psr.
но, если хочется лисапедить/костылить, то можно примерно так:
$classmap = [
     'Namespace\Class' => 'Path/To/Class.php',
];

spl_autoloader_register(function($classname) use $classmap {
    if (isset($classmap[$classname])) {
        include $classmap[$classname];
    }
});

classmap можно или прописывать ручками, или формировать динамически.

повторюсь еще раз: это костыль, в котором сейчас особой необходимости нет.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
shindakioku
@shindakioku
Не сайтоклепатор
Добро пожаловать в мир composer'a :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы