我有一个包含多个模块的项目.每个模块本身都使用Composer,并且大部分独立于其他模块.
但是,某些模块共享具有不同版本的依赖项.这些依赖项在大多数情况下是向后兼容的,并使用语义版本控制.
我想确保具有最高语义版本的依赖关系优先.这将允许所有模块共享相同的依赖项,并且这些依赖项的向后兼容性将确保没有任何中断.
我的计划是通过控制我调用require_once
各个自动加载器的顺序来做到这一点.下面的代码是一个示例,实际上是生成的.
require_once(__DIR__ . '/moduleA/vendor/autoload.php'); require_once(__DIR__ . '/moduleB/vendor/autoload.php'); require_once(__DIR__ . '/moduleC/vendor/autoload.php');
我做的主要假设是,如果在另一个之前需要自动加载器,它将优先于后者.
我发现但事实恰恰相反.最后出现的自动加载器似乎优先于其他自动加载器.
考虑一个类Foo\MyClass
是这些模块之间共享的依赖关系.我期待上面的加载顺序,Foo\MyClass
将从中获取moduleA/vendor/...
.
相反,它正在形成moduleC/vendor/...
.
我可以翻转生成的顺序以解决此问题,但我想验证PHP自动加载器是否存在可预测的顺序.
是否有PHP执行自动加载器的顺序?多个Composer自动加载器会以任何方式影响这个吗?
谢谢.