2010-05-03 50 views
3

我正在自己的MVC框架上工作,发现自己陷入困境。 我需要以下结构:在PHP中模仿多重继承

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

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

基本上他们应该继承这两个类,但我的问题是'后端/前端'控制器不一定扩展'Base_Crud_Controller'。我知道多重继承不存在于PHP中,但我正在寻找一种解决方案,我选择不要Mixin(就像在Symfony中一样),因为我并不认为这是一个优雅的解决方案。

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

+0

请问您能告诉我们这些课程每个课程是做什么的?你为什么决定创建这种继承模式?我对你想要做的事感到不好。 – Crozin 2010-05-03 11:55:20

+0

“控制器”代表了MVC世界中的基本控制器功能。 后端/前端控制器都扩展'控制器'并实现不同的逻辑。在前端/后端控制器中,我可以使用CRUD_Controllers来实现基本的CRUD功能,但是并不是所有的前端/后端控制器都需要实现CRUD。 – fabieno 2010-05-03 15:51:33

回答

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装饰器,并将它们堆叠在一起,例如,

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