[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подмена класса
demoniqus
Имеется некий класс, для инициализации которого необходимо передавать в конструктор определенный параметр (числовой идентификатор). В конструкторе происходит запрос узла из БД. После получения информации может оказаться, что полученный узел не является нужным типом для текущего класса и необходимо "подменить" класс на правильный. Т.е. я в класс item передаю идентификатор, делаю по нему запрос и узнаю, что данный идентификатор принадлежит узлам, которые надо обрабатывать с помощью класса group. Возможно ли как-то в конструкторе провернуть такую "подмену"?

class item {
protected $node = array();
public function __construct ($id) {
$tmp = getNode($id);
if (!empty($tmp)) {
$this->node = $tmp;
}
else {
...
}
}
}


class group {
....
public function method_group() {...}
}


$node = new item($id);
/*Получил, как item, а работать дальше как group?*/
$node->method_group();

Michael
Посмотри шаблон проектирования Factory Method.


_____________
There never was a struggle in the soul of a good man that was not hard
SlavaFr
Цитата (demoniqus @ 17.11.2012 - 05:20)
/*Получил, как item, а работать дальше как group?*/

это возмозжно только в случае если item и group пренадлежат одному типу ( хотябы interface) и в дальнейшей обработке будут использованны только методы которые в этом типе или интерфейсе находятся.

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

Возможно также реализация посредством Abstract Factory Method.


_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.