没有多重继承怎么解决这个问题?

daG*_*vis 2 php oop inheritance class-design multiple-inheritance

我有课名Controller_Home.它应该继承Controller_PermissionsController_Template.任何带前缀的类都Controller_必须从Controller类继承.

如果在PHP(我的情况)中支持多继承,我可以这样做:

class Controller_Home extends Controller_Permissions, Controller_Template {
Run Code Online (Sandbox Code Playgroud)

而且Controller_Permissions,Controller_Template:

Controller_Permissions extends Controller {

Controller_Template extends Controller {
Run Code Online (Sandbox Code Playgroud)

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

class Controller_Home extends Controller_Template {

class Controller_Permissions extends Controller_Template {

Controller_Template extends Controller {
Run Code Online (Sandbox Code Playgroud)

好的,它有效!

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

怎么做而不重复代码?我不想要另一堂课Controller_TemplateWithoutPermissions.

控制器,模板和权限就是例如.

Rob*_*bin 12

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