Подтвердить что ты не робот

Пакеты Composer, автозагрузка неклассифицированных файлов

Когда я врывался в источник пакета Composer в github, я заметил, что есть файлы php, которые соответствуют именам пространства имен, но им предшествовал символ подчеркивания. Озадаченный Я вытащил пакет (через Composer) и заметил, что загрузчик классов, который Composer генерирует require d, явно подчеркивает файлы, а не автозагрузку, как я ожидал.

Например, в пакете crunch/regular-expression существует пространство имен, называемое Crunch\RegularExpression:

-- src
---- Crunch
------- RegularExpression       <-- folder containing classes
------- _RegularExpression.php  <-- file namespace to Crunch/RegularExpression
                                    containing functions and constants 
                                    (instead of a class)

Первоначально я думал, что эти подчеркнутые файлы были особенностью PSR-0, которую я пропустил, но затем я посмотрел на Composer, сгенерированный autoload_real.php, и увидел, что требуется _RegularExpression.php (среди прочих):

…
$loader->register(true);

require $baseDir . '/src/Crunch/_RegularExpression.php';
require $baseDir . '/src/Crunch/RegularExpression/_Modifier.php';
require $baseDir . '/src/Crunch/RegularExpression/Pattern/_Modifier.php';
require $baseDir . '/src/Crunch/RegularExpression/Pattern/_Assertion.php';

return $loader;
…

Не удалось найти значимую документацию об этой функции Composer. Является ли это хорошим "стандартом" для экспорта неклассифицированных зависимостей на основе имен, таких как функции и константы?

Update

Мой вопрос оказался небольшим неправильным. Выбранный ответ заставил меня обнаружить, что активы без класса могут быть явно объявлены для загрузки в composer.json:

"autoload": {
    "psr-0": { "Crunch\\RegularExpression": "src" },
    "files": [
        "src/Crunch/_RegularExpression.php",
        "src/Crunch/RegularExpression/_Modifier.php",
        "src/Crunch/RegularExpression/Pattern/_Modifier.php",
        "src/Crunch/RegularExpression/Pattern/_Assertion.php"
    ]
}

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

4b9b3361

Ответ 1

Композитор не обрабатывает эти файлы каким-либо особым образом. Автор пакета в этом случае использовал это как своего рода соглашение для хранения функций, которые, как кажется.

Файлы требуются Composer, потому что они определены как "файлы" autoload в composer.json, а не из-за какого-то черного магия на имена файлов.