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