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

おかげで、それは今働いています!私はそれができるようになるとすぐに答えを受け入れます。 –

関連する問題