如何动态的去继承一个类,而不是去写一个类文件去 extends继承

我正在开发一款cms,允许开发插件,现在遇到一个问题。

比如A插件想修改我的程序核心文件\Request->a() 这个方法,那么他可以在钩子处,即将要实例化 \Request类的时候替换成他自己的类\RequestA,
他的类可以这样写
class RequestA extends Request{
public function a(){
echo ‘覆盖父方法’;
}
}

现在有个B插件,他想覆盖我核心文件\Request->b() 方法,如果他也像A插件那样做,这样就冲突了,只能某一个插件有效了。

我想实现这样的功能,想让B插件判断前面有A插件了,就去继承A类,这样可以让2个插件都能正常使用,并且覆盖核心文件的方法。

但似乎php无法实现这样的动态继承某个类。

有什么好的办法可以实现类似的功能呢?

讨论数量: 4

继承就只能覆盖,插件通常的就是加hook点

10个月前 评论
Codex (楼主) 10个月前

貌似一般都是在魔术方法call 里面有选择的调用其它类的属性和方法

10个月前 评论

不建议这样做,更建议上面说的埋点 hook 的方式。

当然,如果你一定要这样做,也可以参考 Swoft 的 AOP 的方式。或者简单参考 Laravel 的 Macroable 的实现。

10个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!