2016-04-26 344 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或其他控制器。它正在工作。我正在使用laravel框架

class SomeotherController 
{ 
    private $ch; 

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

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

請任何人解釋這兩種情況如何工作?

回答

2

事例#2你注入與構造函數的參數Child對象類是由Laravel's IoC

解決在情況#1您創建new statment Child對象,你需要給一個Test類的參數。

如果你想這樣下去你CAL調用應用程序容器化妝方法:

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

app(Child::class)相同\App::make(Child::class)。它爲您提供新對象的實例並自動解決依賴關係。

+0

謝謝@菲利普Koblański – vijaykumar

+0

如果這有幫助 - 你可以標記和接受答案:) –