Ссылки на объект и множественное наследование

Nimous

Guest
Ссылки на объект и множественное наследование

Ситуация следующая:

Есть класс. Предположим, 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)
     {

     }
}
Он подгружает Main, и в конструкторе помещает ссылку на объект-потомок в список main->list1.
Но есть также классы, которые, помимо присутствия в списке 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>";
Но меня мучают сомнения, что в списках Main-List1 и Main->List2
находится то же, что в переменной $c3, поскольку e2->asdf=="sdfsdf" мы не наблюдаем.

Так как же сделать, чтобы везде был один и тот же объект?
 

kruglov

Новичок
[off]
Множественного наследования в php нет. Множественное наследование - это когда класс выводится сразу из нескольких равноправных суперклассов.
[/off]
 

Nimous

Guest
Ок. Неверное определение.
А всё-таки.
Как решить данную проблему?
 

svetasmirnova

маленький монстрик
Ответ на название темы, не особо вникая в содержание: в PHP4 есть агрегация, а в PHP5 метод __call Через них множественное наследование имитируется за 2 минуты
 

Nimous

Guest
Проблема решена.
PHP:
//Вместо
$e1 = new example1('ex_1');
$e2 = new example2('ex_2');
//Нужно
$e1 =& new example1('ex_1');
$e2 =& new example2('ex_2');
Всего навсего.

Можно удалить пост.
 
Сверху