我正在创建一个表单生成器,而我实际上正在处理一个特定的元素:DuplicableElement
。
表单可以包含一个使用jQuery插件(sheepit)复制自身的特殊容器(DuplicableContainer
)。
要实现这一目标,DuplicatableContainer
只能在其子级中拥有DuplicableElement
,因为它们有很多特定的内容。
问题是php不允许多重继承。 (应该与PHP“特征”一起使用但实际上不支持)。我无法同时DuplicableTextBox
延伸DuplicableFormElement
和普通TextBox
元素。
我希望我足够清楚。
编辑:即使有“特征”,问题仍然存在,我找不到一个干净的解决方案。
答案 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
接口。一个类可以扩展一个类并一次实现多个接口。