避免对象多重继承

时间:2012-05-15 18:40:35

标签: php oop

我正在创建一个表单生成器,而我实际上正在处理一个特定的元素:DuplicableElement

表单可以包含一个使用jQuery插件(sheepit)复制自身的特殊容器(DuplicableContainer)。

要实现这一目标,DuplicatableContainer只能在其子级中拥有DuplicableElement,因为它们有很多特定的内容。

问题是php不允许多重继承。 (应该与PHP“特征”一起使用但实际上不支持)。我无法同时DuplicableTextBox延伸DuplicableFormElement和普通TextBox元素。

我希望我足够清楚。

编辑:即使有“特征”,问题仍然存在,我找不到一个干净的解决方案。

2 个答案:

答案 0 :(得分:2)

您还可以将行为/插件注入您的元素,提供特征的功能,但没有官方支持。

<?php
class Car {
  public $behaviors = array();

  public function __call($method, $params) {
    foreach($this->behaviors as $behavior) {
      if (method_exists($behavior, $method)) {
        return call_user_func_array(array($behavior, $method), $params);
      }
    }
  }
}

class Engine {
  public function start() { echo 'Started'; }
}

$car = new Car;
$engine = new Engine;
$car->behaviors[] = $engine;
$car->start(); // Started

答案 1 :(得分:1)

DuplicableElement特别需要成为一个班级吗?如果对象的公共接口是重要的,那么您可以改为使用DuplicableElement接口。一个类可以扩展一个类并一次实现多个接口。