涉及phar文件的PHP自动加载优先级及PHPUnit Phar依赖优先级问询
PHPUnit Phar包依赖优先级说明
核心结论
以phar形式运行PHPUnit时,确实会优先使用phar包内部捆绑的所有依赖,完全不受项目根目录下Composer安装的第三方库版本影响,可以完美解决你遇到的依赖版本冲突问题。
实现逻辑
- PHP原生对Phar归档的执行机制,会为归档内的代码提供独立的类加载优先级,Phar内部内置的类会被优先加载,只有Phar中不存在的类才会回退到项目侧的自动加载器中查找
- PHPUnit官方打包Phar发布包时,已经将自身运行所需的全部依赖(包括公共库、自身组件等)全部封装到归档内部,同时针对性调整了类加载逻辑,完全避免和项目侧的依赖产生版本冲突
- 实际使用时仅需要单独下载对应版本的PHPUnit Phar包,直接运行命令
php ./phpunit-<版本号>.phar <测试目录/文件>即可,无需通过Composer安装任何依赖
官方设计说明
PHPUnit的Phar发布包是完全自包含的可执行程序,设计目标之一就是允许开发者在不改动项目Composer依赖的前提下,使用任意兼容的PHPUnit版本执行测试,不会和项目现有依赖产生任何版本冲突。
内容的提问来源于stack exchange,提问作者Christian Wolf
相关产品推荐
相关产品推荐

