摘要:依賴注入傳統(tǒng)的思路應(yīng)用程序用到一個(gè)類就會(huì)創(chuàng)建類并調(diào)用類的方法。這樣你可以完全控制依賴關(guān)系,通過調(diào)整不同的注入對(duì)象,來控制程序的行為。例如類用到了,可以在不修改類代碼的情況下,改用。
依賴注入
傳統(tǒng)的思路
應(yīng)用程序用到一個(gè)Foo類,就會(huì)創(chuàng)建Foo類并調(diào)用Foo類的方法。 假如這個(gè)方法內(nèi)需要一個(gè)Bar類,就會(huì)創(chuàng)建Bar類并調(diào)用Bar類的方法。 而這個(gè)方法內(nèi)需要一個(gè)Bim類,就會(huì)創(chuàng)建Bim類,接著做些其它工作。
/** * Foo */ class Foo { public function doSomething($value="") { # code... $Bar = new Bar(); $Bar->doSomething(); echo "Foo doSomething","
" ; } } /** * Bar */ class Bar { public function doSomething($value="") { # code... $Bim = new Bim(); $Bim->doSomething(); echo "Bar doSomething","
" ; } } /** * Bim */ class Bim { public function doSomething($value="") { # code... echo "Bim doSomething","
" ; } } $doSomething = new Foo(); $doSomething->doSomething();
依賴注入
應(yīng)用程序用到Foo類,F(xiàn)oo類需要Bar類,
Bar類需要Bim類,那么先創(chuàng)建Bim類,再創(chuàng)建Bar類并把Bim注入,再創(chuàng)建Foo類,并把Bar類注入,
再調(diào)用Foo方法,F(xiàn)oo調(diào)用Bar方法,接著做些其它工作。
/** * Bim2 */ class Bim2 { public function doSomething($value="") { # code... echo "Bim2 doSomething","
" ; } } /** * Bar2 */ class Bar2 { private $bim2 ; public function __construct(Bim2 $bim2) { # code... $this->bim2 = $bim2 ; } public function doSomething($value="") { # code... $this->bim2->doSomething(); echo "Bar2 doSomething","
"; } } /** * Foo */ class Foo2 { private $bar2 ; public function __construct(Bar2 $bar2) { # code... $this->bar2 = $bar2 ; } public function doSomething($value="") { # code... $this->bar2->doSomething(); echo "Foo2 doSomething","
"; } } $doSomething2 = new Foo2(new Bar2(new Bim2())); $doSomething2->doSomething();
這就是控制反轉(zhuǎn)模式。依賴關(guān)系的控制反轉(zhuǎn)到調(diào)用鏈的起點(diǎn)。這樣你可以完全控制依賴關(guān)系,通過調(diào)整不同的注入對(duì)象,來控制程序的行為。
例如Foo類用到了memcache,可以在不修改Foo類代碼的情況下,改用redis。
使用依賴注入容器后的思路是應(yīng)用程序需要到Foo類,就從容器內(nèi)取得Foo類,容器創(chuàng)建Bim類,再創(chuàng)建Bar類并把Bim注入,再創(chuàng)建Foo類,并把Bar注入,應(yīng)用程序調(diào)用Foo方法,F(xiàn)oo調(diào)用Bar方法,接著做些其它工作.
擴(kuò)展:容器負(fù)責(zé)實(shí)例化,注入依賴,處理依賴關(guān)系等工作。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31001.html
摘要:前言先安裝對(duì)應(yīng)的這里用的是不同的擴(kuò)展實(shí)現(xiàn)方式會(huì)有細(xì)微的差異擴(kuò)展地址具體以官網(wǎng)為準(zhǔn)介紹配置信息基類生產(chǎn)者類消費(fèi)者類消費(fèi)者可有多個(gè)配置交換機(jī)路由生產(chǎn)者路由只控制發(fā)送成功不接受消費(fèi)者是否收到頻道 前言 先安裝PHP對(duì)應(yīng)的RabbitMQ,這里用的是 php_amqp 不同的擴(kuò)展實(shí)現(xiàn)方式會(huì)有細(xì)微的差異. php擴(kuò)展地址: http://pecl.php.net/package/amqp 具...
摘要:目錄介紹消息事物類主業(yè)務(wù)類事物類消息事物類消息標(biāo)簽未發(fā)送確認(rèn)發(fā)送發(fā)送成功已取消請(qǐng)求發(fā)送消息根據(jù)進(jìn)行處理只記錄消息數(shù)據(jù)不發(fā)送消息標(biāo)記消息為返回消息唯一標(biāo)識(shí)確認(rèn)發(fā)送消息根據(jù)對(duì)消息進(jìn)行處理發(fā)送消息數(shù)據(jù)標(biāo)記消息為消息發(fā)送成功后標(biāo)記消息為取消發(fā)送消息 目錄介紹 MessageTr.php 消息事物類 Business.php 主業(yè)務(wù)類 BusinessDb.php DB事物類 Mess...
摘要:前言之前寫的織夢(mèng)源碼解析之程序安裝一文中,還有幾個(gè)值得講解的文件沒有提到,這里說明一下??偨Y(jié)安裝文件,到此真的結(jié)束了。 前言 之前寫的《dedecms5.7(織夢(mèng))源碼解析之程序安裝》一文中,還有幾個(gè)值得講解的文件沒有提到,這里說明一下。 代碼 templates目錄 該文件夾中,一共有step-1.html、step-2.html、step-3.html、step-4.html、st...
摘要:前言原生支付后需要調(diào)用服務(wù)端接口進(jìn)行驗(yàn)證檢測(cè)是否真正的支付成功環(huán)境配置建議提成配置參數(shù)錯(cuò)誤操作成功支付驗(yàn)證蘋果支付認(rèn)證的憑證后的數(shù)據(jù)環(huán)境配置沙箱地址真實(shí)運(yùn)營(yíng)地址數(shù)據(jù)組裝日志記錄操作這兩行一定要加,不加會(huì)報(bào)錯(cuò)誤請(qǐng)求有錯(cuò)誤數(shù)據(jù)錯(cuò) 前言 IOS原生支付后,需要調(diào)用服務(wù)端接口進(jìn)行驗(yàn)證,檢測(cè)是否真正的支付成功!
閱讀 882·2021-11-18 10:02
閱讀 1705·2019-08-30 15:56
閱讀 2578·2019-08-30 13:47
閱讀 2649·2019-08-29 12:43
閱讀 864·2019-08-29 11:19
閱讀 1795·2019-08-28 18:23
閱讀 2680·2019-08-26 12:23
閱讀 3020·2019-08-23 15:29