场景
相信做php开发的小伙伴都会遇到这样的情况,使用第三方的包时会遇到各种bug,官方又没来得及更新修复的,特别是大版本升级的时候最常见,又或者项目有需求需要改到包的代码的情况。
实例
1.用thinkphp6为例
在项目目录中创建一个文件夹名为 patch
然后创建一个文件名为 Autoload.php
代码为 以PhpAmqpLib\Connection\AbstractConnection 为例
<?php
/**
* 加载器,将需要改进的composer库需要修改的类放在此处加载
*/
spl_autoload_register(function ($cls) {
$map = [
'PhpAmqpLib\Connection\AbstractConnection' => __DIR__ . '/AbstractConnection.php', // 修复PhpAmqpLib 8.1的问题
// ....更多要修改的类
];
if (isset($map[$cls])) {
include $map[$cls];
return true;
}
}, 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的代码都提到仓库管理中。