2010-05-03 52 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));