Разница между автоматической загрузкой PSR-4 и картой классов?


Что касается Laravel, у меня возник вопрос об автоматической загрузке композитора, т. Е. о разнице между автоматической загрузкой "psr-4" и "classmap".

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

Author: halfer, 2016-07-31

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.

 27
Author: Finwe, 2017-04-21 09:44:31