Nimous
Guest
Ссылки на объект и множественное наследование
Ситуация следующая:
Есть класс. Предположим, Main:
Это синглтон.
Он сделан для того, чтобы остальные классы могли его подгружать по необходимости.
А поскольку таковых немало, есть класс Common1, общий предок для них всех:
Он подгружает Main, и в конструкторе помещает ссылку на объект-потомок в список main->list1.
Но есть также классы, которые, помимо присутствия в списке list1, должны присутствовать и в Main->list2.
Для них тоже написан общий предок:
Собственно, потомки потомков:
Запускаем всю схему:
Но меня мучают сомнения, что в списках Main-List1 и Main->List2
находится то же, что в переменной $c3, поскольку e2->asdf=="sdfsdf" мы не наблюдаем.
Так как же сделать, чтобы везде был один и тот же объект?
Ситуация следующая:
Есть класс. Предположим, Main:
PHP:
class main
{
var $list1=array();
var $list2=array();
function &Instance( $args=array() )
{
static $instance;
if(!is_object($instance)) $instance = new main ( $args );
return $instance;
}
function main()
{
}
}
Он сделан для того, чтобы остальные классы могли его подгружать по необходимости.
А поскольку таковых немало, есть класс Common1, общий предок для них всех:
PHP:
class common1
{
var $clsid1;
function common1($clsid1="")
{
$this->main = &main::Instance();
$this->clsid1 = $clsid1;
$this->main->list1[$this->clsid1]=&$this;
$this->_construct($clsid1);
}
function _construct($clsid1)
{
}
}
Но есть также классы, которые, помимо присутствия в списке list1, должны присутствовать и в Main->list2.
Для них тоже написан общий предок:
PHP:
class common2 extends Common1
{
var $clsid2;
function _Construct($clsid="")
{
$this->clsid2 = $clsid;
$this->main->list2[$this->clsid2]=&$this;
$this->_OnInit($clsid);
}
}
PHP:
class example1 extends common1
{
function _construct($clsid="")
{
}
}
class example2 extends common2
{
function _OnInit($clsid)
{
}
}
PHP:
$main = &main::Instance();
$e1 = new example1('ex_1');
$e2 = new example2('ex_2');
$e2->asdf = "sdfsdf";
echo "<pre>"; print_r($main); echo"</pre>";
находится то же, что в переменной $c3, поскольку e2->asdf=="sdfsdf" мы не наблюдаем.
Так как же сделать, чтобы везде был один и тот же объект?