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