2012-05-15 9 views
1

Я создаю генератор формы, и я фактически работаю над конкретным элементом: DuplicableElement.Избегайте множественного наследования объектов

Форма может содержать специальный контейнер (DuplicableContainer), который использовал плагин jQuery (sheepit), чтобы дублировать себя.

Чтобы получить работу, DuplicatableContainer может иметь только DuplicableElement в своем ребенке, потому что для них очень много особых вещей.

Проблема в том, что php не разрешает множественное наследование. (должен работать с php «Черты», но фактически не поддерживается). Я не могу сделать DuplicableTextBox одновременно и DuplicableFormElement, и обычный элемент TextBox.

Надеюсь, я был достаточно ясен.

Редактировать: Даже с помощью «Трейтов» проблема все еще существует, и я не могу найти чистое решение.

ответ

1

Нужно ли DuplicableElement s быть классом? Если публичный интерфейс к объекту имеет значение, вы можете сделать вместо этого DuplicableElement. Класс может распространять один класс и реализовывать сразу несколько интерфейсов.

+0

Уже подумал об этом, но ему нужен класс, чтобы объявить реализованный в нем метод. – Leto

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 
+0

+1 Хорошая техника. Это какая-то прозрачная обертка или имеет какое-то официальное название? –

+0

Посмотрите, как единственное решение, не так ли? Спасибо – Leto

+0

Это рядом с вашей идеей: [link] (http://labs.contexttheory.com/Blog/tabid/94/EntryId/12/Simulating-Multiple-Inheritance-in-PHP-5-Just-a-bit -of-noodling-about.aspx) – Leto

Смежные вопросы