我正在研究自己的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中一样),因为我不认为这是一个优雅的解决方案。
接口不适合我,因为所有这些都最终成为应该实现方法的具体类。
答案 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));