Когда я врывался в источник пакета 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"
]
}
Символы подчеркивания в файлах были конвенцией, используемой для определения их из определений классов и не имеют особых целей при автозагрузке.