PHP как сделать autoload из нескольких папок?

Сейчас работает так:

spl_autoload_register(function ($class) {include 'core/' . $class . '.php'; });
 $app = new App();

Есть папка core куда я складываю файлы классов. Сейчас их стало много, и хочется разделить на модели, виды, контроллеры Подскажите как сделать так, чтобы он искал классы из списка папок (массив)?


Ответы (1 шт):

Автор решения: Ivan Dudarev

Можно как-то так:


spl_autoload_register(function ($class) {
    $baseDir = __DIR__ . DIRECTORY_SEPARATOR . 'core' . DIRECTORY_SEPARATOR;
    $file = $baseDir . str_replace('\\', DIRECTORY_SEPARATOR, rtrim($class, '\\')) . '.php';
    if (file_exists($file)) {
        require_once $file;
    }
});

Теперь классы контроллеров можно вынести в директорию core/Controllers и в этих файлах после <?php указать namespase Controllers; (регистр важен) например, файл core/Controllers/HomeController.php будет выглядеть как-то так:

<?php

namespace Controllers;

class HomeController
{
    // тут содержимое
}

Но лучше освоить composer - тогда можно вообще забыть про самописную автозагрузку, про заморочки с подключением сторонних библиотек, про перенос своего кода между проектами и т.д.

→ Ссылка