2016-07-31 2 views
8

Что касается Laravel, у меня возник вопрос о автозагрузке композитора, то есть о различии между автозагрузкой «psr-4» и «classmap».Разница между автозагрузкой PSR-4 и classmap?

1 различие, которое я знаю, PSR-4 не нуждается в повторном dumpautoload для каждого изменения или добавления новых файлов, тогда как для classmap требуется dumpautoload для каждого изменения существующих файлов, содержащих классы, или добавления нового файла в указанный каталог.

ответ

21

Стандарт PSR-4 требует от вас строгой структуры файловой системы, основанной на пространствах имен. Скажем, у вас есть приложение в каталоге src с пространством имен App, тогда все подпространства будут отображать подкаталоги, а имена классов будут такими же, как имена файлов, без расширения .php.

{ 
    "autoload": { 
     "psr-4": { "App\\": "src/" } 
    } 
} 

src/ 
    Foo/ 
     Bar.php <---- App\Foo\Bar class 
    Baz.php <---- App\Baz class 

автозагрузчика то «знает», где искать класс определенного полного имени и поэтому не требует команды дамп-автозагрузку нюхать файлы классов.

Проблемы с производительностью затем решаются с помощью флага composer dump-autoload --optimize-autoloader или -o, который будет генерировать карту классов аналогичным способом, который делает автозагрузка classmap.


С другой стороны, classmap самозарядные не требует, чтобы иметь практически любую определенную структуру файла или каталога, он будет рекурсивно пройти через .php и .inc файлов в указанных каталогах и файлах и нюхать классов в них ,

{ 
    "autoload": { 
     "classmap": ["src/", "lib/", "Something.php"] 
    } 
} 

Этих классы затем добавляются в список (кэшированном в PHP файл в каталоге производителя/композитора), который используется для автозагрузки.

Любой новый класс должен быть добавлен в этот список, запустив команду composer dump-autoload.

+0

Что касается простых файлов php без класса? например просто файл php с кучей глобальных функций, как добавить это? – Toskan

+1

@ Тоскан см. Https://getcomposer.org/doc/04-schema.md#files – Finwe

Смежные вопросы