[英]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.