2016-04-26 15 views
1
class Test { 
    function test() 
    { 
     return 'test'; 
    } 
} 


abstract class MasterAbstract { 

    public function __construct (Test $test) 
    { 
     $this->test = test; 
    } 

    protected function runMaster() 
    { 
     return $this->test->test(); 
    } 

} 

class Child extends MasterAbstract 
{ 
    public function run() 
    { 
     return 1212; 
    } 
} 

ケース1:依存性の注入

エラーを取得
$c = new Child(); 
echo $c->run; 

:: __構築物()MasterAbstractに渡される引数1は、テストのインスタンス にする必要があり、ここで

、何も与えられていません

ケース2:これで私はχのオブジェクトを作成していませんldまたはsomeotherControllerです。それは働いている。私はlaravelフレームワークを使用しています

class SomeotherController 
{ 
    private $ch; 

    public function __constructor(Child $ch) 
    { 
     $this->ch = $ch; 
    } 

    public function run() 
    { 
     return $this->ch->run(); 
    } 
} 

どのようにこれらの2つのケースの作業を説明してください?ケース#2では

答えて

2

あなたはnewなステートメントでChildオブジェクトを作成し、パラメータでTestクラスを与える必要があるケース#1ではLaravel's IoC

によって解決されるコンストラクタのパラメータを持つChildオブジェクトクラスを注入します。

あなたはこのように行きたい場合は、メソッドにするアプリのコンテナを呼び出すCAL:

$c = app(Child::class); 
echo $c->run; 

app(Child::class)\App::make(Child::class)と同じです。それはあなたに新しいオブジェクトのインスタンスを与え、依存関係を自動的に解決します。

+0

ありがとうございます@FilipKoblański – vijaykumar

+0

これが役立つ場合 - あなたは答えをマークして受け入れることができます:) –