日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

依赖注入模式中,为什么用对象而不是用数组传递?

發(fā)布時間:2023/12/10 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 依赖注入模式中,为什么用对象而不是用数组传递? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

依賴注入(Dependence Injection, DI) 依賴注入是控制反轉(zhuǎn)的一種設計模式。依賴注入的核心是把類所依賴的單元的實例化過程,放到類的外面去實現(xiàn)。依賴注入的實現(xiàn)離不開反射。

依賴注入(Dependence Injection, DI)

所謂的依賴注入,指將依賴的對象通過參數(shù)的形式一次性傳入,使用時不需要顯式 new 了,比如把A類所依賴的B類、C類等以屬性或者構(gòu)造函數(shù)等方式注入A類而不是直接在A類中實例化。

只要不是由內(nèi)部生產(chǎn)(比如初始化、構(gòu)造函數(shù)中通過工廠方法、自行手動 new 的),而是由外部以參數(shù)或其他形式注入的,都屬于依賴注入(DI) 。

依賴注入需要利用反射實現(xiàn),比如:

class A {protected $b;public function __constrcut(B $b){$this->b = $b;} }// 通過控制反轉(zhuǎn)容器生成 A 的實例時,會通過反射發(fā)現(xiàn) A 的構(gòu)造函數(shù)需要一個 B 類的實例 // 于是自動向 A 類的構(gòu)造函數(shù)注入 B 類的實例 $a = IoC::make(A::class);

依賴注入的實質(zhì)就是把一個類不可更換的部分和可更換的部分 分離開來,通過注入的方式來使用,從而達到解耦的目的。
比如有一個 Mysql 數(shù)據(jù)庫連接類如下:

class Mysql {private $host;private $port;private $username;private $password;private $db_name;public function __construct(){$this->host = '127.0.0.1';$this->port = 22;$this->username = 'root';$this->password = '';$this->db_name = 'db';}public function connect(){return mysqli_connect($this->host, $this->username, $this->password, $this->db_name, $this->port);} }// 使用 $db = new Mysql(); $con = $db->connect();

可更換部分是數(shù)據(jù)庫的配置

class Configuration {private $host;private $port;private $username;private $password;private $db_name;public function __construct($host, $port, $username, $password, $db_name){$this->host = $host;$this->port = $port;$this->username = $username;$this->password = $password;$this->db_name = $db_name;}public function getHost(){return $this->host;}public function getPort(){return $this->port;}public function getUsername(){return $this->username;}public function getPassword(){return $this->password;}public function getDbName(){return $this->db_name;} }

不可更換部分是Mysql數(shù)據(jù)庫的連接操作

class Mysql {private $configuration;public function __construct(Configuration $config){$this->configuration = $config;}public function connect(){return mysqli_connect($this->configuration->getHost(),$this->configuration->getUsername() ,$this->configuration->getPassword,$this->configuration->getDbName(),$this->configuration->getPort());} }

這樣就完成了配置文件和連接邏輯的分離,使用如下:

$config = new Configuration('127.0.0.1', 'root', '', 'my_db', 22); $db = new Mysql($config); $con = $db->connect();

$config是注入Mysql的,這就是所謂的依賴注入。

總結(jié)

注入可以理解成從外面把東西打進去。因此,依賴注入模式中,要分清內(nèi)和外,要解除依賴的類內(nèi)部就是內(nèi),實例化所依賴單元的地方就是外。在外通過構(gòu)造形參,為類內(nèi)部的抽象單元提供實例化,達到解耦的目的,使下層依賴于上層,而不是上層依賴于下層。

因此,依賴注入模式中,要用對象傳遞,通過一個實例的反射來實現(xiàn),這是數(shù)組做不到的。

轉(zhuǎn)載于:https://www.cnblogs.com/sunshineliulu/p/10747756.html

總結(jié)

以上是生活随笔為你收集整理的依赖注入模式中,为什么用对象而不是用数组传递?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。