Пакеты Composer, автозагрузка файлов не на основе классов
Когда я копался в источнике пакета Composerна GitHub Я заметил что былиPHP-файлы, которые соответствуют именам пространства имен но предшествовали подчеркиванием. Озадаченный, я потянул пакет вниз (через Composer) и заметил, что загрузчик классов, который генерирует Composerrequire
Эти файлы подчеркнуты явно, а не автозагрузка, как я ожидал.
Например, в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, которую я пропустил, но потом я посмотрел на сгенерированный Composerautoload_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. Является ли это хорошим "стандартом" для экспорта не зависящих от класса зависимостей пространства имен, таких как функции и константы?
ОбновитьМой вопрос оказался немного неправильным. Выбранный ответ привел меня к обнаружению, что неклассовые активы могут быть явно объявлены для загрузки в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"
]
}
Подчеркивания на файлах были условным обозначением, используемым для отделения их от определений классов, и не имели специальных целей при автозагрузке.