tp中的容器和依賴注入

2021-08-16 19:39:47 字數 3430 閱讀 3414

用來更方便的管理類依賴及執行依賴注入的工具

依賴注入其實本質上是指對類的依賴通過構造器完成自動注入,例如在控制器架構方法和操作方法中一旦對引數進行物件型別約束則會自動觸發依賴注入,由於訪問控制器的引數都來自於url請求,普通變數就是通過引數繫結自動獲取,物件變數則是通過依賴注入生成

<?php 

namespace

useuse

think\controller;

class

index

extends

controller

public

function

hello

()

}

依賴注入的類統一由容器進行管理,你可以隨時繫結類到容器中,支援多種繫結方式。

繫結類標識
可以對已有的類庫繫結乙個標識(唯一),便於快速呼叫。

if (!function_exists('bind')) 

} /**

* 快速獲取容器中的例項 支援依賴注入

*@param string $name 類名或標識 預設獲取當前應用例項

*@param array $args 引數

*@param bool $newinstance 是否每次建立新的例項

*@return object

*/function

}

// 繫結類庫標識

bind('cache','think\cache')

// 快速呼叫(自動例項化)

呼叫和繫結的標識必須保持一致(包括大小寫)

/**

* 繫結乙個類、閉包、例項、介面實現到容器

*@access public

*@param string|array $abstract 類標識、介面

*@param mixed $concrete 要繫結的類、閉包或者例項

*@return $this

*/public

function

bind

($abstract, $concrete = null)

elseif ($concrete

instanceof closure) elseif (is_object($concrete)) else

return

$this;

}

繫結閉包
bind('sayhello', function

($name) );

繫結類的例項
$cache = new think\cache;

// 繫結類例項

bind('cache',$cache);

// 快速呼叫類的例項

繫結至介面實現
對於依賴注入使用介面類的情況,我們需要告訴系統使用哪個具體的介面實現類來進行注入,這個使用可以把某個類繫結到介面

// 繫結think\loggerinte***ce介面實現到think\lobind('think\loggerinte***ce','think\log'
使用介面作為依賴注入的型別

<?php 

namespace

usethink\loggerinte***ce;

class

index

}

批量繫結
如果傳入乙個陣列的話,就表示進行批量繫結

bind(['route' => \think\route::class,

'session' => \think\session::class,

'url' => \think\url::class]);

可以在應用或者模組目錄下面定義 provider.php 檔案(返回乙個陣列),系統會自動批量繫結類庫到容器中。

return [

'route' => \think\route::class,

'session' => \think\session::class,

'url' => \think\url::class

];

系統內建繫結到容器中的類庫
// 註冊核心類到容器

// 介面依賴注入

依賴注入和容器

下面列子gundong方法和kaochuan方法緊密結合,偶合度高,不利於擴充套件和維護。程式設計需要降低偶合度,增加可擴充套件性。class luntai class baoma baoma new baoma baoma kaochuan 使用依賴注入優化後的寫法 class luntai cl...

tp6中的依賴注入

容器是用來更方便的管理類依賴及執行依賴注入的工具。依賴注入其實本質上是指在建構函式中對其他需要使用的類迅速例項化。依賴注入的類統一由容器進行管理,你可以隨時繫結類到容器中,支援多種繫結方式。例如我們有個 settings類,現在繫結到容器中 繫結類庫標識 bind settings 或者 bind ...

DI依賴注入和容器

優點 減少類和類之間的關係 容器 1.降低類與類之間的耦合度 2.實現惰性載入 需要哪個類再建立哪乙個類 3.便於管理 輪胎類 汽車類 class luntai class bmw 普通方式 bmw new bmw bmw run 依賴注入 class bmw function run luntai...