2015-08-27 77 views
0

我是OOP的新手,我不太瞭解依賴注入。依賴注入和`new` in __construct

假設我有一個抽象類Responder,並將其擴展爲SuccessResponderErrorResponder。在我的控制器類中,說UsersController,我如何訪問這兩個類?

我以前用的new方式:

public function __construct() { 
    $this->errorResponder = new ErrorResponder(); 
    $this->successResponder = new SuccessResponder(); 
} 

但之後,我已經經歷了一些截屏(laracast),它看起來像現代的方法是使用依賴注入:

public function __construct(
    ErrorResponder $errorResponder, 
    SuccessResponder $successResponder 
) { 
    $this->errorResponder = $errorResponder; 
    $this->successResponder = $successResponder; 
} 

所以我一直在關注這些片刻,直到我使用了Lumen。我開始仔細考慮我編寫的每個代碼。由於在運行時解決了依賴關係,因此在PhpStorm中沒有自動完成功能的確給我帶來了很多麻煩。

爲什麼依賴注入?爲什麼不只是new? 是否僅有編碼風格

我已經瀏覽了幾年前關於依賴注入的一些問題,但這些都像辯論主題。

我認爲它在某些情況下必須是有用的,只是我太新而無法遇到這些。那麼需求依賴注入的情況是什麼?任何人都可以給我一些啓發嗎?

+0

更容易測試一個 – nathanmac

回答

0

依賴注入就是把事情分開,分配責任。 在你的情況下,如果你使用新的,那麼你的控制器中的所有功能必須創建單個對象。 但如果你使用構造,那麼你不需要在函數中創建單獨的對象