1

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

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

要开始这项工作,DuplicatableContainer只能DuplicableElement在它的孩子中拥有,因为它们是他们特有的很多东西。

问题是 php 不允许多重继承。(应该与 php "Traits" 一起使用,但实际上不支持)。我不能DuplicableTextBox同时扩展DuplicableFormElement和正常TextBox元素。

我希望我足够清楚。

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

4

2 回答 2

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
于 2012-05-15T18:45:41.927 回答
1

DuplicableElements 特别需要是一个类吗?如果对象的公共接口很重要,您可以创建DuplicableElement一个接口。一个类可以扩展一个类并同时实现多个接口。

于 2012-05-15T18:45:00.257 回答