场景
相信做php开发的小伙伴都会遇到这样的情况,使用第三方的包时会遇到各种bug,官方又没来得及更新修复的,特别是大版本升级的时候最常见,又或者项目有需求需要改到包的代码的情况。
实例
1.用thinkphp6为例
在项目目录中创建一个文件夹名为patch然后创建一个文件名为Autoload.php
代码为 以PhpAmqpLib\Connection\AbstractConnection为例
/**
* 加载器,将需要改进的composer库需要修改的类放在此处加载
*/spl_autoload_register(function($cls){
$map = [PhpAmqpLib\Connection\AbstractConnection=>__DIR__./AbstractConnection.php,// 修复PhpAmqpLib 8.1的问题// ....更多要修改的类];if(isset($map[$cls])) {include$map[$cls];returntrue;
}
},true,true);
在patch目录下创建AbstractConnection.php文件,复制PhpAmqpLib\Connection\AbstractConnection过来,最后根据自身需求修改即可。
还差一步即可大功告成,在项目根目录中找到composer.json文件,找到autoload,然后再files中填上前面Autoload.php的相对路径
"autoload": {"psr-4": {"app\\":"app"},"psr-0": {"":"extend/"},"files": ["patch/Autoload.php"]
}
总结
这样就可以很好统一管理自己需要修改的包代码,同时又不用影响包原本的代码,提交代码的时候更不用把vendor的代码都提到仓库管理中。