2016-08-08 7 views
1

Я пытаюсь получить доступ к функции объекта из дочернего класса, где объект является защищенной переменной родителя.Доступ к функции-члену объекта, который является переменной-членом родительского класса

Я не совсем уверен, что лучший способ сделать это ... любая помощь или указатели будут оценены.

Ниже приведен пример настройки, но он не работает. Это дает следующее сообщение об ошибке:

Catchable fatal error: Argument 1 passed to App\Parent::__construct() must be an instance of App\Object, none given, called in Controller.php on line 25 and defined in Parent.php on line 12

Так как я понимаю ошибку, мне нужно как-то передать экземпляр класса Parent в классе ребенка. Но это похоже на анти-шаблон, потому что он расширяет класс родителя. Я должен упустить что-то основное.

Parent.php

class Parent 
{ 
    protected $object; 

    public function __construct(Object $object) // line 12 
    { 
     $this->object = $object; 
    } 

} 

Child.php

class Child extends Parent 
{ 
    public function doStuff() 
    { 
     return parent::$object->objectFunction()); 
    } 

} 

Controller.php

... 

namespaces etc 

... 

public function control() 
{ 
    $parent = new Parent(new Object($variable)); 

    $child = new Child(); // line 25 
    $child->doStuff(); 
} 

ответ

1

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

Также передайте объект дочернему экземпляру и создайте метод __construct() и передайте ему параметр.

class Child extends Parent 
{ 
    public __construct($var) 
    { 
     parent::__construct($var); 
    } 

    public function doStuff() 
    { 
     return parent::$object->objectFunction()); 
    } 

} 

Controller.php

public function control() 
{ 
    //$parent = new Parent(new Object($variable)); 

    $child = new Child(new Object($variable)); // line 25 
    $child->doStuff(); 
} 
+0

Спасибо, что делает гораздо больше смысла, она сейчас работает! Я приму ответ, как только это позволит. –