Как работает автоматическая загрузка PSR-4 в composer для пользовательских библиотек?
Я использую следующую структуру каталогов, основанную на моем понимании того, как работают пространства имен в PHP:
project_root
app/
| lib/
| | MyCompany/
| | | Utility/
| | | | Logger.php
| | | Core/
| | | | User.php
vendor/
composer/
symfony/
guzzle/
bootstrap.php
composer.json
согласно спецификации PSR-4, Полное имя класса имеет следующую форму:
<NamespaceName>(<SubNamespaceNames>)*<ClassName>
Вопрос 1:
из моей структуры каталогов выше, является предположение ниже правильно?
- NamespaceName = MyCompany
- SubNamespaceNames = Утилита | Ядро
- ClassName = Регистратор / Пользователь
Вопрос 2:
Если мое ушко.php-файл содержит следующее:
<?php
require 'vendor/autoload.php';
1 ответов
взято из документации, которую вы связали:
{
"autoload": {
"psr-4": {
"MyCompany\": "app/lib/MyCompany/",
}
}
}
это довольно понятно, он просто говорит загрузчику, что app/lib/MyCompany
корень для MyCompany\
пространство имен.
затем вы сможете использовать класс как \MyCompany\Utility\Logger
.
обратите внимание, что в PSR-4, в отличие от PSR-0, вы обычно опускаете MyCompany
из структуры каталогов, и просто использовать app/lib/
.