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


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

最新更新