我正在使用自己的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));