#### 1. 什么是依賴注入 ---- 依賴注入本質(zhì)上是指類的依賴通過構(gòu)造器完成自動注入。 例如:在控制器構(gòu)造方法或普通方法中一旦對參數(shù)進(jìn)行對象類型約束則會自動觸發(fā)依賴注入,由于訪問控制器的參數(shù)都來自于URL請求,普通變量就是通過參數(shù)綁定自動獲取,對象變量則是通過依賴注入生成 依賴注入:即允許通過類的方法傳遞對象的能力,并且限制了對象的類型(約束),而傳遞對象的背后那個類被自動綁定并且實例化了,這就是依賴注入 #### 2. 容器 --- 依賴注入的類統(tǒng)一由容器管理的,大多數(shù)情況下是自動綁定和自動實例化的 如果想手動來完成綁定和實例化,可以使用 bind() 和 app() 助手函數(shù)實現(xiàn) #### 3. 使用示例 --- ``` // 綁定類庫標(biāo)識,這個標(biāo)識具有唯一性,以便快速調(diào)用 bind('one', \app\model\User::class); // 快速調(diào)用并且自動實例化對象,類庫標(biāo)識嚴(yán)格區(qū)分大小寫 app('one'); // 第二參數(shù)用于傳參, // 自動實例化對象的方式默認(rèn)使用單例模式,第三參數(shù)為true時調(diào)用會重新實例化 app('one', [], true); // 也可以直接綁定一個類到容器中并自動實例化 app(\app\model\User::class); // 使用 bind([]) 可以批量綁定 // 不同系統(tǒng)有專門提供批量綁定的文件 app/provider.php bind([ 'user' => \app\model\User::class, 'admin' => \app\model\Admin::class, ]); ``` #### 4. 容器 Provider 定義文件 --- **框架文件 app/provider.php 用于定義容器類, 將類綁定到容器中** ** 自己封裝的一些類文件可以通過該文件將類綁定到容器中, 以便快速調(diào)用 ** ``` <?php use app\ExceptionHandle; use app\Request; // 容器Provider定義文件 return [ 'think\Request' => Request::class, 'think\exception\Handle' => ExceptionHandle::class, // 擴展類庫 'math' => Math::class, 'layui' => Layui::class, ]; ``` **快速調(diào)用** ```php app('layui')->table('用戶列表', 10, $data); ```