Доступ к родителю из дочернего обьекта.

tristram

Guest
Доступ к родителю из дочернего обьекта.

Суть
PHP:
class parent
{
 var $child;
 var $target;
 function parent()
 {
  $this->child = new child();
 }
}
class child
{
 function child()
 {
  // ...
 }
}
Нужно из функции child получить доступ к parent->target. Простите за идиотский вопрос, просто я обходился без этого до сих пор. Естественно пришла на ум идея сделать
PHP:
//...
function parent()
{
  $this->child = new child();
  $this->child->parent = &$this;
}
//...
а потом из процедуры child() обращаться к $this->parent, но думаю есть более правильное решение.
Заранее спасибо.
P.S. в ICQClient делаю ICQClient_DB для хранения записей :)
 

SiMM

Новичок
Передавай child'у указатель на parent прямо при создании (ничто не мешает конструктору иметь входные параметры).
 

tristram

Guest
ну это понятно. я по сути это и предложил. а есть подход без этого? я думаю программерам php нужно было сделать $parent или что-то в этом роде. есть же $this.
 

SiMM

Новичок
По сути, а не в реализации. Какое нафиг parent, когда у тебя агрегация, а не наследование?
PHP:
class parent {
  function parent() {
    $this->child = new child($this);
  }
}
class child {
  function child(&$parent) {
    $this->parent = $parent;
  }
}
PS: если с сылками начудил - поправьте. Проверял на 4.3.9
 

tristram

Guest
этот вариант ну ни как не подходит. ладно, спасибо. как я понимаю самое правильное это использовать первый вариант т.к. он работает нормально. просто я думал есть специальная фича для этого.
 

SiMM

Новичок
> этот вариант ну ни как не подходит
Сказочник :)

> как я понимаю самое правильное это использовать первый вариант
Самое правильное - прочесть того же Буча.
 

moxnatiy

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

tristram

Guest
PHP:
class parent 
{ 
var $child; 
var $target; 
function parent() 
{ 
  $this->child = new child(); 
  $this->child->parent = &$this;
} 
} 
class child 
{
var $parent;
function child() 
{ 
  // ... 
} 
}
меня полностью устраивает. просто я думал можно проще. в общем всё ок.
 

svetasmirnova

маленький монстрик
>Доступ к родителю из дочернего обьекта.
А теперь посмотри на код, который ты привёл:
PHP:
class parent
{
var $child; 
...
}
class child
{
function child()
{
  // ...
}
}
И кто тут родитель?
 

tristram

Guest
я не так выразился ;) это скорее агрегация. в терминологии не очень разбираюсь. как я понимаю родитель и дочерний обьект возникает при наследовании используя extends. в общем вопрос решен используя первональный вариант.
 
Сверху