Composer: требуется пакет с настраиваемым пространством имен

Я постепенно начинаю использовать Composer в своих проектах PHP, однако я всегда сомневался в этом.

Например, скажем, это мой composer.json файл:

{
"require": {
"ramsey/uuid": "~2.8"}
}

Я говорю композитору, я хочу пакет ramsey/uuid и, как ожидается, он загружает и включает в себя пакет.

Когда я хочу получить доступ к классам в пакете, я вынужден что-то вроде:

$uuid = \Rhumsaa\Uuid\Uuid::uuid4();

Есть ли способ, которым я могу потребовать пакет и заставить более простое пространство имен, например, для. \Uuid::uuid4();, избегая необходимости писать полный NS, включая автора пакета?

Что я должен изменить на моем composer.json чтобы быть в состоянии сделать это? Спасибо.

Заметка: Я знаю о PHP use, Я мог бы use Rhumsaa\Uuid\Uuid;… Однако мне нужно делать это в каждом отдельном файле, это не практично. Даже меньше, если я собираю небольшую платформу для самостоятельного использования. Я хочу для инстанте иметь \Util\UUIDсопоставлены с \Rhumsaa\Uuid\Uuid,

Я тоже думаю файл autoload_psr4.php может быть изменен для достижения этой цели, однако после update все изменения отменяются.

0

Решение

Нет, вы ничего не можете сделать, чтобы сократить эти пространства имен.

Composer не должен ничего делать с пространствами имен PHP. Имя, которое вы используете для идентификации программного пакета, не связано с пространством имен PHP. Они не должны совпадать в любом случае. Composer предоставляет только автозагрузчик, который будет включать исходный код класса, который вы используете в своем коде. Возможные альтернативы: либо загрузить этот исходный код вручную, используя include_once() или же require_once()или создайте автозагрузчик самостоятельно, который сделает это.

Теперь, когда Composer ушел, мы можем обсудить пространства имен и имена классов. До PHP 5.3 не было пространств имен. Классы либо вообще не использовались в нескольких проектах, потому что они были созданы с короткими именами, которые, вероятно, будут конфликтовать с другими классами с таким же именем, или они были расширены, чтобы содержать в своем имени отличительный компонент, например Zend_Controller_Abstract или же sfController (из Symfony 1).

Эти имена классов также имеют тенденцию становиться очень длинными, особенно с изобретением автозагрузки PSR-0 (которая была в течение очень долгого времени единственным стандартом PSR, когда-либо определенным).

С пространствами имен вы получаете, по крайней мере, метод для сокращения этих ссылок на имена классов в вашем коде.

Вы должны либо использовать оригинальную длинную форму в каждом месте, которое вы используете, либо импортировать ее с более коротким псевдонимом. Да, вы должны повторять условие импорта в каждом файле — но вы не импортируете КАЖДЫЙ класс в КАЖДЫЙ файл, вы будете импортировать только те классы, которые вы действительно используете.

Использование IDE очень полезно для решения этих задач. Они предлагают вам способ искать во всех доступных классах тот, который вы хотите использовать, но не можете запомнить. Они также занимаются импортом классов пространства имен в ваш файл. Вам редко понадобится вручную «добавлять импорт везде».

3

Другие решения

Других решений пока нет …