繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM