php - 在没有多重继承的情况下如何解决这个问题?

标签 php oop inheritance class-design multiple-inheritance

我有一个名为Controller_Home的类。它应该继承自 Controller_PermissionsController_Template。任何以 Controller_ 为前缀的类都必须继承自 Controller 类。

如果 PHP 支持多重继承(我的例子),我可以这样做:

class Controller_Home extends Controller_Permissions, Controller_Template {

Controller_PermissionsController_Template:

Controller_Permissions extends Controller {

Controller_Template extends Controller {

现在我需要做这样的事情:

class Controller_Home extends Controller_Template {

class Controller_Permissions extends Controller_Template {

Controller_Template extends Controller {

好的,成功了!

现在我需要在没有权限的情况下使用Controller_Template(在Controller_Permissions中)。

如何在不重复代码的情况下做到这一点?我不需要另一个类 Controller_TemplateWithoutPermissions

Controller 、模板和权限只是示例。

最佳答案

多重继承的常见替代方法是使用组合。这使得该关系成为“具有”关系,而不是"is"关系。即,在上面的示例中,您可能有 ControllerHome 从 ControllerTemplate 继承,但将一些 ControllerPermissions 作为变量。这样,ControllerHome 是一个 ControllerTemplate 并且具有 ControllerPermissions。

关于php - 在没有多重继承的情况下如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7709051/

相关文章:

php - 电子邮件被放入垃圾邮件 - 错误的 header 问题

php - 限制对 PHP 管理按钮的访问

java - java中私有(private)成员变量的子类访问

c++ - C++ 中的抽象类可以使用抽象函数吗?

c++ - 您是否需要从所有派生类调用虚拟基类构造函数?即使它们不是最衍生的?

php - 获取 cURL 响应 header 和响应正文

C++ OOP - 数组(矩阵)乘法、删除对象

java - 在 Java 中使用父类(super class)处理异常

c++ - 通过扩展添加可变性

php - MySQL - 如果存在更新则插入介绍