2015-10-08 5 views
1

Давайте предлагаешь иметь следующие классы, и следующий код:PHP Object - доступ родительский элемент от ребенка

class ParentClass { 
    public $x; 
    public $child; 

    public function __construct($x) { 
     $this->x=$x; 
     $this->child=new ChildClass(); 
    } 
} 

class ChildClass extends ParentClass { 

    public function __construct() { 

    } 

    public function tellX() { 
     echo $this->x; 
    } 
} 

$parent1=new ParentClass('test'); 
$parent2=new ParentClass('test2'); 
echo $parent1->child->tellX(); 
echo "<BR>"; 
echo $parent2->child->tellX(); 

Это выводит две пустые строки для меня. Есть ли возможность, чтобы создать новый объект (objChild), внутри объекта (objParent), а также получить доступ к не-статические свойства objParent от objChild?

+0

У вас есть 2 разных объекта, которые не имеют никакого отношения друг к другу. – Rizier123

+0

@ Rizier123 Правильный ответ, вы должны разместить его как ответ, а не комментарий –

ответ

1

То, что вы описываете, возможно, но то, что вы не понимаете, заключается в том, что дочерний объект, созданный в конструкторе родителя, происходит от родителя, но это другой экземпляр родителя, чем тот, который создает ребенка.

Попробуйте этот пример для лучшего понимания:

class ParentClass { 
    public $x; 
    public $child; 

    public function __construct($x) { 
     $this->setX($x); 
     $this->child = new ChildClass($x + 1); 
    } 

    function setX($x) 
    { 
     $this->x = $x; 
    } 

    public function tellX() { 
     echo $this->x; 
    } 
} 

class ChildClass extends ParentClass { 

    public function __construct($x) 
    { 
     $this->setX($x); 
    } 
} 

$parent1=new ParentClass(1); 
$parent2=new ParentClass(2); 
$parent1->tellX(); 
echo "<BR>"; 
$parent1->child->tellX(); 
echo "<BR>"; 
$parent2->child->tellX(); 
echo "<BR>"; 
$parent2->tellX(); 

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

Традиционно вы должны создать экземпляр дочернего класса, который наследует значения/функции от родителя вместо создания нового экземпляра дочернего элемента из родителя.

Важно отметить, что отношения между родителями и дочерними элементами в PHP - это то, что переменные-члены не наследуются. Таким образом, почему я реализовал функцию setX в родительском элементе, чтобы подделать это поведение.

Смежные вопросы