2016-08-08 172 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

不要實例化一個單獨的父類,它將被實例化爲實例化的一部分兒童班。

同樣將對象傳遞給子實例並創建一個__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

謝謝,更有道理,它的工作吧!我會盡快接受答案。 –