Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 抽象构造函数的依赖注入_Php_Laravel_Dependency Injection_Abstract Class_Abstract - Fatal编程技术网

Php 抽象构造函数的依赖注入

Php 抽象构造函数的依赖注入,php,laravel,dependency-injection,abstract-class,abstract,Php,Laravel,Dependency Injection,Abstract Class,Abstract,案例1: class Test { function test() { return 'test'; } } abstract class MasterAbstract { public function __construct (Test $test) { $this->test = test; } protected function runMaster() { return $th

案例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;
    }
}
这里有错误

传递给MasterAbstract::_construct()的参数1必须是实例 未给出测试结果

案例2:在本例中,我没有为子控制器或其他控制器创建任何对象。它起作用了。我使用的是laravel框架

$c = new Child();
echo $c->run;
请任何人解释一下这两个案例是如何运作的

在案例#2中,您使用构造函数的参数注入
子对象类,该参数由

在案例#1中,您使用
new
station创建
Child
对象,并且需要在参数中提供一个
Test

如果您想这样做,请调用app container make方法:

class SomeotherController 
 {
    private $ch;

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

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

app(Child::class)
\app::make(Child::class)
相同。它为您提供新对象的实例,并自动解析依赖项。

谢谢@Filip Koblański
$c = app(Child::class);
echo $c->run;