如何动态的去继承一个类,而不是去写一个类文件去 extends继承
我正在开发一款cms,允许开发插件,现在遇到一个问题。
比如A插件想修改我的程序核心文件\Request->a() 这个方法,那么他可以在钩子处,即将要实例化 \Request类的时候替换成他自己的类\RequestA,
他的类可以这样写
class RequestA extends Request{
public function a(){
echo ‘覆盖父方法’;
}
}
现在有个B插件,他想覆盖我核心文件\Request->b() 方法,如果他也像A插件那样做,这样就冲突了,只能某一个插件有效了。
我想实现这样的功能,想让B插件判断前面有A插件了,就去继承A类,这样可以让2个插件都能正常使用,并且覆盖核心文件的方法。
但似乎php无法实现这样的动态继承某个类。
有什么好的办法可以实现类似的功能呢?
继承就只能覆盖,插件通常的就是加hook点
貌似一般都是在魔术方法call 里面有选择的调用其它类的属性和方法
不建议这样做,更建议上面说的埋点 hook 的方式。
当然,如果你一定要这样做,也可以参考 Swoft 的 AOP 的方式。或者简单参考 Laravel 的 Macroable 的实现。