簡體   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