Когда я врывался в источник пакета Composer на github, я заметил, что есть файлы php, которые соответствуют именам имен, но им предшествовал символ подчеркивания. Озадаченный Я вытащил пакет (через Composer) и заметил, что загрузчик классов, созданный Composer, require
эти подчеркнутые файлы были явно, а не автозагрузкой, как я ожидал.
Например, в пакете 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, сгенерированный _RegularExpression.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. Является ли это хорошим «стандартом» для экспорта неклассифицированных зависимостей на основе имен, таких как функции и константы?
Мой вопрос оказался небольшим неправильным. Выбранный ответ заставил меня обнаружить, что неклассифицированные активы могут быть явно объявлены для загрузки в 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" ] }
Символы подчеркивания в файлах были конвенцией, используемой для определения их из определений классов и не имеют особых целей в автозагрузке.
Композитор не обрабатывает эти файлы каким-либо особым образом. Автор пакета в этом случае использовал это как своего рода соглашение для хранения функций, которые, как кажется.
Файлы требуются Composer, потому что они определены как «файлы» автозагрузки в composer.json , а не из-за черной магии на имена файлов.