在PHP中模仿多重继承

时间:2010-05-03 11:48:52

标签: php oop multiple-inheritance

我正在研究自己的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中一样),因为我不认为这是一个优雅的解决方案。

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

1 个答案:

答案 0 :(得分:3)

考虑使用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));