как при вызове конструктора создать объект наследуемого класса?

nbah

Новичок
как при вызове конструктора создать объект наследуемого класса?

как при вызове конструктора создать объект наследуемого класса? что-то вроде

PHP:
class Test {

function Test () {
	return new ExtTest;
}
}


class ExtTest extends Test {
}

$obj = new Test;
не проходит.

я хочу создавая объект Топик, в конструкторе уточнять его свойства (исходя из записей в БД) и возврящать объект, возможно, с более продвинутыми свойствами. к примеру: ТопикСголосованием.
 

nbah

Новичок
неа, не понятно.

-~{}~ 20.12.04 11:11:

как мне код переписать?
 

_RVK_

Новичок
Начнем с того что конструктор!=обычный метод и предназначен для инициализации объекта класса. Поэтому тебе нужно добавить отдельный метод для этого. В конструкторе ты можешь создавать обект и помешать его в свойство-массив.
Во-вторых как объект может возвращать своего потомка? Вот подумай, когда ты описываешь класс Test, то еще не существует класса ExtTest, потому что он является потомком. Это не значит что это не будет работать, но смысла в этом ноль. И это неправильно.
В-третьих, ты делаешь копию объекта, хотя обычно следует возвращать ссылку на объект.

Вывод из всего вышесказанного. Ошибки на этапе проектирования. Продумай все еще раз.
 

nbah

Новичок
_RVK_
но я-то точно знаю, что сама идея не бессмысленна. вона - взаправдашний пример. продумай все еще раз ;)
 

_RVK_

Новичок
Идея возвращать обект класса-потомка бессмысленна. Идея возвращать его в конструкторе так-же бессмысленна. Конструктор не для этого. Перечитай еще мой предидущий пост, и подумай еще раз.

-~{}~ 20.12.04 12:29:

В вот идея фабрики объектов, как раз небессмысленна, хотя и не нова. Но для этого нужно использовать отдельный класс а не предка.

Да, и кстати, твой пример вообще ничего не говорит. Ты б его переписал, более преближенно к реальной задаче. Так было бы понятнее что тебе нужно.
 

nbah

Новичок
_RVK_
мой пример писан не на пхп, а на великом могучем. и заметь: бессмысленность своего кода я уже отмечал.
 

StUV

Rotaredom
nbah
вообще говоря - двигай в обратную сторону....
вникни в этот пример:
PHP:
class foo_base {
	protected $bar;
	function __construct($s)	{
		$this->bar = $s;
		$this->show();
	}
	protected function show()	{
		echo $this->bar;
	}
}
class foo extends foo_base	{
	function __construct($s)	{
		parent::__construct($s);
	}
	protected function show()	{
		echo 'this->bar == "'.$this->bar.'"';
	}
}

$foo = new foo('some');
 

_RVK_

Новичок
nbah
Так зачем писать бессмысленный код? Напиши осмысленный.
Вообще тебе нужно что то типа этого:
PHP:
class Test{

function Test($var1,$var2...) {
   //Инициализируем объект
}
}

class TestMaker {

function & get() {
   //Достаём чего-то из базы
   ...
   return new Test($var1,$var2...);
}
}
-~{}~ 20.12.04 13:09:

StUV
В чем смысл этого куска кода?
PHP:
function __construct($s)    { 
        parent::__construct($s); 
    }
;)
 
Сверху