PHP не позволяет двум классам иметь одно и то же имя, поэтому даже если вы найдете обходной путь для этого (например, загрузку класса вручную из указанного файла в зависимости от контекста), это будет больше похоже на хрупкий взлом, чем на реальное решение, и оно не удастсяпри попытке загрузить эти два класса в одном запросе.
Хотя вы хотите избежать изменения библиотечного кода, на самом деле это самое простое и надежное решение.Внести эти изменения должно быть легко, и я сомневаюсь, что библиотека, которая до сих пор не использует PSR-0/4, активно развивается, поэтому для обслуживания fork не требуется никаких дополнительных усилий.
Есть ли какие-либо параметры, которые Composer предоставляет для подобных ситуаций, чтобы я мог импортировать обе версии класса Foo в карту классов композитора и в результате различать их в моем проекте?
Полностью определенное имя (которое для не-namespaced classes - это просто имя класса) должно быть уникальным, это ограничение PHP, и автозагрузчик Composer полагается на него.Лучшее, что вы можете получить, - это игнорировать один из этих классов, используя параметр exclude-from-classmap
:
"autoload": {
"exclude-from-classmap": ["libraries/some-lib/Foo-alternate.php"]
}
Тогда Composer будет автоматически загружать только класс из libraries/some-lib/Foo.php
.Вы все еще можете загрузить второй класс вручную (require __DIR__ . '/libraries/some-lib/Foo-alternate.php'
), но с этим следует быть очень осторожным (это приведет к фатальной ошибке, если libraries/some-lib/Foo.php
уже загружен).