laravel 解析 bootstrap/app.php 中綁定服務容器的一種方式

在laravel中,想要把服務綁定到容器一般是用下面的方法,在服務提供者中,常見類似的寫法,第一個參數傳標識,第二個參數傳閉包

但是在 bootstrap/app.php 中有三行代碼是這麼寫的,第一個參數傳了一個契約(接口),第二個參數傳了一個具體類

問:爲什麼要這麼寫呢? 答:爲了在依賴注入時,實現解耦

舉個例子:

如果需要在控制器中調用自己寫的工具類,比如處理字符串的,如何調用呢?

創建一個文件 app/Tools/StringTools.php  注:Tools目錄也是自己建的,隨便建個啥目錄都行,只是爲了方便管理

在控制器中調用,正常引入,依賴注入,就可以用了

但是,如果後來處理字符串的工具類換了呢?比如換成了StringUnit類,那就得改這個Template控制器了,像下圖這樣

如果,之前引入StringTools類的有100個控制器文件呢?挨個改,想想都覺得刺激 ⊙▽⊙.有別的方法嗎?有!

1,建一個 app/Contracts/Tools.php 文件,這是個接口文件

2,在 app/Tools/StringTools.php 類中,實現 Tools接口

3,在 app/Providers/AppServiceProvider.php 文件的 register 方法中,進行綁定

4,在控制器中,注入接口,而不是直接注入StringTools類

這時,如果需要把StringTools類換成StringUnit類就很簡單了

1,新建StringUnit類,並實現Tools接口

2,更改 app/Providers/AppServiceProvider.php 文件的 register 方法,搞定! ^_^

在 bootstrap/app.php 中的那三個綁定,就是幹這個用的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章