编程语言
首页 > 编程语言> > 模仿PHP中的多重继承

模仿PHP中的多重继承

作者:互联网

我正在使用自己的MVC框架,发现自己陷于困境.
我需要以下构造:

 Controller  
      --> Backend_Controller
           --> Backend_Crud_Controller
       --> Frontend_Controller
           --> Frontend_Crud_Controller

“ Backend_Crud_Controller”和“ Frontend_Crud_Controller”具有相同的功能,因此它们应该扩展名为“ Base_Crud_Controller”的另一个类,唯一的区别来自实现不同机制的“后端/前端”控制器.

基本上,它们应该继承这两个类,但我的问题是“后端/前端”控制器不一定扩展“ Base_Crud_Controller”.

我知道PHP中不存在多重继承,但是我正在寻找一种解决方案,我选择不使用Mixins(就像在Symfony中一样),因为我认为这不是一个优雅的解决方案.

接口不适合我,因为所有这些最终都应作为应实现方法的具体类.

解决方法:

考虑使用Decorators或重新考虑您的设计.

class FrontEnd
{
    protected $baseController;
    public function __construct(BaseController $controller) { /* ... */}
    // ... 
    // methods specific to Frontend
    // ...
    public function __call($method, args) {
        // implement __call to delegate other methods to BaseController
    }
}

您还可以创建一个BackEnd和Crud Decorator并将它们堆叠在一起,例如

$crudBackEndController = new Crud(new BackEnd(new BaseController));

标签:oop,multiple-inheritance,php
来源: https://codeday.me/bug/20191210/2099135.html