亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

理解php依賴注入和控制反轉

2024-05-04 23:45:46
字體:
來源:轉載
供稿:網友
這篇文章主要幫助大家理解php依賴注入和控制反轉,感興趣的小伙伴們可以參考一下
 

要想理解php依賴注入和控制反轉兩個概念,就必須搞清楚如下的問題:

 DI——Dependency Injection   依賴注入

IoC——Inversion of Control  控制反轉

1、參與者都有誰?  

答:一般有三方參與者,一個是某個對象;一個是IoC/DI的容器;另一個是某個對象的外部資源。又要名詞解釋一下,某個對象指的就是任意的、普通的Java對象; IoC/DI的容器簡單點說就是指用來實現IoC/DI功能的一個框架程序;對象的外部資源指的就是對象需要的,但是是從對象外部獲取的,都統稱資源,比如:對象需要的其它對象、或者是對象需要的文件資源等等。

2、依賴:誰依賴于誰?為什么會有依賴?

答:某個對象依賴于IoC/DI的容器。依賴是不可避免的,在一個項目中,各個類之間有各種各樣的關系,不可能全部完全獨立,這就形成了依賴。傳統的開發是使用其他類時直接調用,這會形成強耦合,這是要避免的。依賴注入借用容器轉移了被依賴對象實現解耦。

3、注入:誰注入于誰?到底注入什么?

答:通過容器向對象注入其所需要的外部資源

4、控制反轉:誰控制誰?控制什么?為什么叫反轉?

答:IoC/DI的容器控制對象,主要是控制對象實例的創建。反轉是相對于正向而言的,那么什么算是正向的呢?考慮一下常規情況下的應用程序,如果要在A里面使用C,你會怎么做呢?當然是直接去創建C的對象,也就是說,是在A類中主動去獲取所需要的外部資源C,這種情況被稱為正向的。那么什么是反向呢?就是A類不再主動去獲取C,而是被動等待,等待IoC/DI的容器獲取一個C的實例,然后反向的注入到A類中。

5、依賴注入和控制反轉是同一概念嗎?

答:從上面可以看出:依賴注入是從應用程序的角度在描述,可以把依賴注入描述完整點:應用程序依賴容器創建并注入它所需要的外部資源;而控制反轉是從容器的角度在描述,描述完整點:容器控制應用程序,由容器反向的向應用程序注入應用程序所需要的外部資源。 

下面我們通過例子來具體看看依賴注入的一些實現方式

1.構造器注入

<?phpclass Book {  private $db_conn;   public function __construct($db_conn) {    $this->db_conn = $db_conn;  }}

2、setter注入

<?php class book{   private $db;   private $file;   function setdb($db){     $this->db=$db;   }   function setfile($file){     $this->file=$file;   }}class file{}class db{}...class test{   $book = new Book();    $book->setdb(new db());    $book->setfile(new file());}?>

上面倆種方法代碼很清晰,但是當我們需要注入很多個依賴時,意味著又要增加很多行,會比較難以管理。

比較好的解決辦法是 建立一個class作為所有依賴關系的container,在這個class中可以存放、創建、獲取、查找需要的依賴關系

<?phpclass Ioc {  protected $db_conn;  public static function make_book() {    $new_book = new Book();    $new_book->set_db(self::$db_conn);    //...    //...    //其他的依賴注入    return $new_book;  }}

此時,如果獲取一個book實例,只需要執行$newone = Ioc::makebook();

以上是container的一個具體實例,最好還是不要把具體的某個依賴注入寫成方法,采用registry注冊,get獲取比較好

<?phpclass Ioc {/*** @var 注冊的依賴數組*/   protected static $registry = array();   /**  * 添加一個resolve到registry數組中  * @param string $name 依賴標識  * @param object $resolve 一個匿名函數用來創建實例  * @return void  */  public static function register($name, Closure $resolve)  {   static::$registry[$name] = $resolve;  }   /**   * 返回一個實例   * @param string $name 依賴的標識   * @return mixed   */  public static function resolve($name)  {    if ( static::registered($name) )    {     $name = static::$registry[$name];     return $name();    }    throw new Exception('Nothing registered with that name, fool.');  }  /**  * 查詢某個依賴實例是否存在  * @param string $name id  * @return bool   */  public static function registered($name)  {   return array_key_exists($name, static::$registry);  }}

現在就可以通過如下方式來注冊和注入一個

<?php$book = Ioc::registry('book', function(){$book = new Book;$book->setdb('...');$book->setprice('...');return $book;}); //注入依賴$book = Ioc::resolve('book');?>

以上就是針對php依賴注入和控制反轉的理解,希望對大家學習PHP程序設計有所幫助。



注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩视频永久免费观看| 国精产品一区一区三区有限在线| 日韩精品亚洲精品| 欧美激情网站在线观看| 亚洲国产精品久久久久久| 国产精品久久久久久久久久久久| 中文字幕国产精品久久| 日韩电影在线观看中文字幕| 奇米影视亚洲狠狠色| 中文字幕免费精品一区高清| 成人亲热视频网站| 国产成人自拍视频在线观看| 日韩欧美国产网站| 亚洲免费高清视频| 日韩欧美在线视频观看| 日韩欧美在线字幕| 91精品国产乱码久久久久久蜜臀| 国产精品va在线播放我和闺蜜| 日韩av在线免费播放| 亚洲精品456在线播放狼人| 日本欧美国产在线| 激情成人在线视频| 精品国产拍在线观看| 2019精品视频| 国产欧美一区二区三区久久人妖| 中文字幕在线观看亚洲| 久久91精品国产| 日韩极品精品视频免费观看| 色噜噜狠狠狠综合曰曰曰| 亚洲美女视频网| 国产一区二区美女视频| 亚洲精品电影网站| 欧美极品少妇xxxxⅹ喷水| 国产精选久久久久久| 久久综合网hezyo| 亚洲欧美国产精品va在线观看| 久久精品亚洲一区| 日韩av理论片| 国产精品久久久久av| 国产精品久久久久久久久久东京| 亚洲欧美综合图区| 亚洲性日韩精品一区二区| 91探花福利精品国产自产在线| 国产精品九九久久久久久久| 欧美裸体xxxx极品少妇软件| 日韩中文理论片| 久久久av电影| 国产成人av网址| 日韩成人xxxx| www.欧美三级电影.com| 日韩国产在线看| 亚洲欧美成人精品| 91精品国产自产在线观看永久| 国产成人精品视| 欧美国产日韩xxxxx| 91精品国产综合久久香蕉的用户体验| 亚洲欧美一区二区三区情侣bbw| 日韩欧美高清在线视频| 欧美日韩国产精品一区| 欧美电影免费在线观看| 国产精品成人av在线| 欧美日韩国产91| 亚洲第一中文字幕| 久久九九有精品国产23| 亚洲一区二区中文字幕| 国产精品ⅴa在线观看h| 日韩欧美中文字幕在线播放| 伊人亚洲福利一区二区三区| 精品国产一区二区三区久久狼黑人| 欧美电影免费观看高清| 不卡伊人av在线播放| 精品视频偷偷看在线观看| 国产日韩换脸av一区在线观看| 亚洲一区二区三区xxx视频| 欧美精品videosex性欧美| 日韩激情在线视频| 欧美性猛交xxxx| 91久久精品美女| 日韩av在线一区| 国产欧美一区二区三区久久人妖| 91久热免费在线视频| 欧美高清视频一区二区| 亚洲第一天堂无码专区| 日韩欧美国产激情| 青草成人免费视频| 97免费在线视频| 川上优av一区二区线观看| 亚洲日韩第一页| 懂色av中文一区二区三区天美| 亚洲成人网在线| 中文字幕亚洲综合| 欧美精品aaa| 欧美三级欧美成人高清www| 亚洲国产中文字幕在线观看| 亚洲成人久久一区| 色偷偷88888欧美精品久久久| 亚洲国产精品一区二区久| 2023亚洲男人天堂| 亚洲综合最新在线| 成人一区二区电影| 欧美激情在线狂野欧美精品| 久久综合久久88| 欧美韩国理论所午夜片917电影| 亚洲国产成人久久综合| 日韩欧美国产骚| 久久精品成人欧美大片| 一色桃子一区二区| 国产亚洲精品激情久久| 亚洲精品综合久久中文字幕| 中文字幕精品在线视频| 亚洲人成在线一二| 欧美在线xxx| 精品亚洲夜色av98在线观看| 日韩激情av在线免费观看| 91在线视频导航| 在线播放亚洲激情| 日韩美女视频免费看| 中文字幕在线视频日韩| 国产日韩在线亚洲字幕中文| 亚洲一区二区三区四区视频| 久久国产精品电影| 黄色91在线观看| 亚洲午夜性刺激影院| 国产视频久久久| 久久香蕉精品香蕉| 26uuu另类亚洲欧美日本老年| 亚州欧美日韩中文视频| 欧美中文字幕在线观看| 欧美肥老妇视频| 久久精品最新地址| 超碰97人人做人人爱少妇| 亚洲人成在线播放| 亚洲va码欧洲m码| 国产日韩在线免费| 青青草国产精品一区二区| 原创国产精品91| 日韩亚洲第一页| 亚洲国产成人av在线| 亚洲国产精品va在线看黑人| 日韩在线欧美在线国产在线| 欧美日韩国产丝袜另类| 欧美日韩免费区域视频在线观看| 在线观看视频亚洲| 久久手机免费视频| 久久久久久av| 97精品视频在线| 欧美理论片在线观看| 亚洲国产成人久久综合| 中文字幕av一区二区| 91国内揄拍国内精品对白| 国产精品日日摸夜夜添夜夜av| 亲子乱一区二区三区电影| 伊人久久精品视频| 97久久精品人搡人人玩| 九色精品美女在线| 久久这里只有精品视频首页| 国产一区二区三区在线播放免费观看| 亚洲欧美激情在线视频| 2023亚洲男人天堂| 理论片在线不卡免费观看| 日韩av在线精品| 91国产在线精品| 久久激情视频久久| 欧美黄色片在线观看|