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:在这种情况下,我不是为子控制器或其他控制器创建任何对象。它正在工作.我正在使用 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)
相同。它为您提供新对象的实例并自动解析依赖项。