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必须是一个实例 测试,没有给出
案例2:在此我没有为孩子或someotherController创建任何对象。它正在工作。我正在使用laravel框架
class SomeotherController
{
private $ch;
public function __constructor(Child $ch)
{
$this->ch = $ch;
}
public function run()
{
return $this->ch->run();
}
}
请有人解释这两种情况如何运作?
答案 0 :(得分:2)
在#2的情况下,您使用由Laravel's IoC解析的构造函数参数注入Child
对象类
如果是#1您使用Child
语句创建new
对象,则需要在参数中提供Test
类。
如果你想这样,你可以调用app container make方法:
$c = app(Child::class);
echo $c->run;
app(Child::class)
与\App::make(Child::class)
相同。它为您提供了新对象的实例,并自动解析了依赖关系。