Разница между автоматической загрузкой PSR-4 и картой классов?
Что касается Laravel, у меня возник вопрос об автоматической загрузке композитора, т. Е. о разнице между автоматической загрузкой "psr-4" и "classmap".
1 разница, которую я знаю, заключается в том, что PSR-4 не нуждается в повторении dumpautoload
для каждого изменения или добавления новых файлов, тогда как classmap нуждается в dumpautoload
для каждого изменения существующих файлов, содержащих классы, или добавления нового файла в указанный каталог.
1 answers
Стандарт PSR-4 требует от вас строгой структуры файловой системы, основанной на пространствах имен. Допустим, у вас есть приложение в каталоге src
с пространством имен App
, тогда все подпространства имен будут отражать подкаталоги, а имена классов будут такими же, как имена файлов без расширения .php
.
{
"autoload": {
"psr-4": { "App\\": "src/" }
}
}
src/
Foo/
Bar.php <---- App\Foo\Bar class
Baz.php <---- App\Baz class
Затем загрузчик "знает", где искать класс с определенным полным именем, и поэтому не требует команды dump-autoload для поиска файлов классов.
Проблемы с производительностью затем решаются с помощью флага composer dump-autoload --optimize-autoloader
или -o
, который будет генерировать карту классов аналогично тому, как это делает автоматическая загрузка карты классов.
С другой стороны, автоматическая загрузка карты классов не требует от вас наличия практически какой-либо определенной структуры файлов или каталогов, она будет рекурсивно просматривать файлы .php
и .inc
в указанных каталогах и файлах и искать классы в них.
{
"autoload": {
"classmap": ["src/", "lib/", "Something.php"]
}
}
Эти классы затем добавляются в список (кэшируются в PHP файл в каталоге поставщика/композитора), который используется для автоматической загрузки.
Затем любой новый класс должен быть добавлен в этот список, выполнив команду composer dump-autoload
.