把有依賴關(guān)系的類放到容器中自晰,解析出這些類的實(shí)例,就是依賴注入稍坯。目的是實(shí)現(xiàn)類的解耦酬荞。
實(shí)例:Class A中用到了Class B的對(duì)象b,一般情況下瞧哟,需要在A的代碼中顯式的new一個(gè)B的對(duì)象混巧。采用依賴注入技術(shù)之后,A的代碼只需要定義一個(gè)私有的B對(duì)象勤揩,不需要直接new來獲得這個(gè)對(duì)象咧党,而是通過相關(guān)的容器控制程序來將B對(duì)象在外部new出來并注入到A類里的引用中。這樣做有什么好處呢陨亡?
解釋:假如現(xiàn)在有N多個(gè)類傍衡,需要用到Class B,那就需要在類里面實(shí)例化N多次,這樣對(duì)于后期的維護(hù)和管理都是不方便的数苫,如果后期需求發(fā)生改變聪舒,那更改量有大很多。
依賴注入的具體實(shí)現(xiàn):
上面代碼中的就是依賴注入虐急,現(xiàn)在又有一個(gè)問題,假如滔迈,現(xiàn)在類b中的b方法現(xiàn)在改名為c了止吁,那a類里面的a方法中被辑,就要將b類中調(diào)用的b方法改成c方法。那依舊涉及到那個(gè)問題敬惦,如果有N多個(gè)類要用到B類呢盼理?那需要做的也是去N多個(gè)類中不斷得去改,這樣對(duì)后期得維護(hù)俄删,需求更改都是要花費(fèi)很大的成本宏怔。
因此,PHP中有一個(gè)接口類的說法畴椰,接口類:
PHP接口(interface)的特點(diǎn)
1臊诊、接口的方法必須是公開的。
2斜脂、接口的方法默認(rèn)是抽象的抓艳,所以不在方法名前面加abstract。
3帚戳、接口可以定義常量玷或,但不能定義成員屬性,常量的定義和用法和類中常量一樣片任。
4偏友、類可以實(shí)現(xiàn)多個(gè)接口(相當(dāng)于把多個(gè)功能集于一身,如手機(jī)實(shí)現(xiàn)了小靈通对供、MP3位他、MP4的功能)
5、接口也可以繼承接口犁钟。
不多做解釋棱诱,直接貼代碼:
圖中可以看到,b類是一個(gè)接口類涝动,c,d繼承了b類迈勋,接口類的具體規(guī)則,則可以自己百度一下醋粟,代碼中靡菇,我們延續(xù)了,第一圖的代碼做為修改米愿,把普通類厦凤,改為接口類來實(shí)現(xiàn)依賴注入,就能解決那個(gè)遺留的問題育苟,當(dāng)依賴注入的類中的方法较鼓,改變了,那我們需要做的就是,在原有的類中博烂,創(chuàng)建一個(gè)子類香椎,接著寫上相同得方法,然后在方法中寫上需要的內(nèi)容和邏輯就行了禽篱,當(dāng)需要得時(shí)候畜伐,直接實(shí)例化,然后注入到需要的類中就行躺率,哪怕是那些類中原有存在的方法都不需要更改玛界。