今天突然又一次在控制器中看到下面這樣的代碼,laravel中也有.
publicfunctiongetReqInfo(Request$request){
代碼
}
先說自己目前的認知和疑問:
依賴輸入是一種設計模式,實質是把一個類不可能更換的部分和可更換的部分分離開來,通過注入的方式來使用,從而達到解耦的目的.
這不是有些類似trait嗎?
不是相當於在類A中使用類B里的方法嗎?有多種實現方式,最常見的先引入,實例化,再調用.
通過依賴注入調用其他類以及類里的方法,和其它調用方式有什么區別呢?
上述代碼里,方法后所傳入的參數
Request,這個作用是類似強類型語言里的限定類型,表示限定在Request類下
$request,表示限定在Request類下的$request對象?
該怎么正確理解解依賴注入呢?有沒有什么通俗易懂的例子或者表述?
依賴注入,你可以分開理解。拆成,依賴和注入依賴:就是你現在要用request對象的get方法,所有你必須要先能得到request對象,然后才能使用這個方法。這個就是依賴。注入:怎么得到request對象呢?一種是你直接$request=newRequest()可以得到,這種也稱為主動獲取,還有一種就是把整個對象當做一個參數傳進來,類型你這樣的寫法,然后去使用。這個就是依賴注入,控制反轉(IOC)一般的做法是會在construct方法里面直接注入,后面需要的去使用它。現在的框架設計思想大多會怎么寫,可以提高框架的性能,因為只要使用的時候才會實例化。
trait的使用一般是為了解決多繼承問題.不是相當於在類A中使用類B里的方法嗎?有多種實現方式,最常見的先引入,實例化,再調用.是這么理解的,依賴注入也只是一種實現方式。依賴注入這種方式,可以利用懶加載,使用的時候才會實例化。
publicfunctiongetReqInfo(Request$request){
代碼
}這樣寫的話,表示我可以使用Request對象的方法,如果我還要使用其它的,可以繼續往里加。publicfunctiongetReqInfo(Request$request,Response$response){
代碼
}