依赖注入抽象构造函数

时间:2016-04-26 09:14:55

标签: php laravel dependency-injection abstract-class abstract

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();
    }
 }

请有人解释这两种情况如何运作?

1 个答案:

答案 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)相同。它为您提供了新对象的实例,并自动解析了依赖关系。