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

1

Предположим, что у нас есть следующие классы и следующий код:

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 разных объекта, которые не имеют ничего общего друг с другом.
  • 0
    @Rizier123 Rizier123 Это правильный ответ, вы должны опубликовать его как ответ, а не комментарий
Теги:
oop

1 ответ

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();

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню