相信做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的相对路径
34;autoload": { "psr-4": { "app\\": "app" }, "psr-0": { "": "extend/" }, "files": [ "patch/Autoload.php" ]}
总结
这样就可以很好统一管理自己须要修正的包代码,同时又不用影响包原来的代码,提交代码的时候更不用把vendor的代码都提到仓库管理中。