【问题标题】:Dependency injection on abstract constructor抽象构造函数的依赖注入
【发布时间】:2016-04-26 09:14:54
【问题描述】:
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;
    }
}

案例一:

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

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

【问题讨论】:

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


    【解决方案1】:

    在 #2 的情况下,您使用 Laravel's IoC 解析的构造函数参数注入 Child 对象类

    如果 #1 您使用 new 声明创建 Child 对象,并且您需要在参数中提供 Test 类。

    如果你想这样你可以调用app容器的make方法:

    $c = app(Child::class);
    echo $c->run;
    

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

    【讨论】:

      猜你喜欢
      • 2011-02-02
      • 2018-06-17
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多