[英]Dependency injection on abstract constructor
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 :: __ construct()的參數1必須是Test的實例,沒有給出
情況2:在這種情況下,我沒有為孩子或someotherController創建任何對象。 它正在工作。 我正在使用laravel框架
class SomeotherController
{
private $ch;
public function __constructor(Child $ch)
{
$this->ch = $ch;
}
public function run()
{
return $this->ch->run();
}
}
請任何人解釋這兩種情況如何運作?
在情況2中,您要注入具有構造函數參數的Child
對象類,該參數由Laravel的IoC解析
在情況1中,您創建了具有new
陳述的Child
對象,並且需要在參數中提供Test
類。
如果要這樣運行,可以調用應用容器的make方法:
$c = app(Child::class);
echo $c->run;
app(Child::class)
與\\App::make(Child::class)
。 它為您提供了新對象的實例,並自動解決了相關性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.