首頁 > 後端開發 > PHP問題 > php依賴注入是什麼意思

php依賴注入是什麼意思

WBOY
發布: 2023-03-15 15:28:01
原創
4379 人瀏覽過

在PHP中,依賴注入是指對類別的依賴透過建構器完成自動注入。控制器架構方法與操作方法中一旦對參數進行物件類型約束則會自動除法依賴注入,由於存取控制器的參數都來自與URL請求,普通變數就是透過參數綁定自動獲取,物件變數則是透過依賴注入生成。

php依賴注入是什麼意思

本文操作環境:Windows10系統、PHP7.1版、Dell G3電腦。

php依賴注入是什麼意思   

依賴注入其實本質上是指對類別的依賴透過建構器完成自動注入,例如在控制器架構方法和操作方法中一旦對參數進行物件類型約束則會自動觸發依賴注入,由於存取控制器的參數都來自於URL請求,普通變數就是透過參數綁定自動獲取,物件變數則是透過依賴注入產生。

所謂依賴,舉個例子說明,一個類Person,另一個類Car,如果Person的某個方法比如說drive,需要引用Car,則稱Person類依賴於 Car類,延伸到對象,這種依賴關係依然成立,比如說Person類別的物件boy依賴Car類別的物件toyota。再講講這個drive方法的實現,假定代碼如下:

Public Person{
...
public void drive(){
  Car toyota=new Car("TOYOTA");
  toyota.挂档;
  toyota.踩油门;
  toyota.打方向;
}
}
登入後複製

    這其中的依賴關係,就導致了對象boy需要負責對象toyota的創建,甚至是整個生命週期的管理,而這樣顯然會帶來耦合度高,不易維護等缺點,比如說要讓這個男孩駕駛一輛Audi,則還需要修改類型Person的程式碼。

    因此在java的設計理論中就提出了一個非常著名的原則,依賴倒轉原則(Dependence Inversion),其核心思想就是要將這個具體類別之間的依賴,盡量轉換成抽象依賴,也就是說類別Person應該依賴抽象類別ICar,而不是具體的類別 Car,這裡java就大力推薦了抽象和介面的使用,至於抽象和介面之間的區別,任何一本JAVA書籍都有介紹,這裡就不再說了。

    這個依賴倒轉原則在設計模式也體現得非常多,比如說工廠模式和建造模式,個人認為控制反轉IoC,其實也可以認為是實現這個原則的一種設計模式。控制反轉,其中的控制這個詞一直不太理解是什麼意思,不過控制反轉的另外一種說法也就是依賴注入(dependence injection),個人覺得更容易理解。還是以上文的boy與toyota為例,其核心就是要將boy依賴的物件toyota注入到boy中去,而無需boy自己去引用toyota,這個注入的過程,通常是由一個控製程式來完成的,無需物件去關心,舉例如下:

Public Person{
private ICar car;
public Person(ICar onecar){
  car=onecar;
}
public void drive(){
  car.挂档;
  car.踩油门;
  car.打方向;
}
}
登入後複製

    這個時候,進行注入並且呼叫的過程,就很簡單了,如下:

Toyota toyota=new Toyota();
Person boy=new Person(toyota);
boy.drive();
登入後複製

    注:這裡我們假定,Toyota類別是ICar介面類別的一個具體實現。

    這個例子就示範一個最簡單的注入方式的例子,也就是建構子方式註入,透過將依賴物件注入到物件的建構子中來實現。另外還有一種常用的注入方式,就是屬性方式註入,意思是透過將依賴物件注入到物件的屬性中來實現,還是以boy和toyota的例子說明,如下:

Public Person{
private ICar car;
public Person(){
}
public void drive(){
  car.挂档;
  car.踩油门;
  car.打方向;
}
public ICar getCar(){
  return this.car;
}
public void setCar(ICar onecar){
  car=onecar;
}
}
登入後複製

    這個時候,進行注入並且調用的過程,就變成如下所示:

Toyota toyota=new Toyota();
Person boy=new Person();
boy.setCar(toyota);
boy.drive();
登入後複製

    至此依賴注入的概念應該比較清楚了,再來看看在Spring中如何實現IoC的,看看Spring如何作為一個成熟的IoC容器,Spring中其實主要透過兩個概念來實現IoC,首先透過XML設定文件,將物件和依賴物件都配置到某個XML檔案中,當然該XML檔案需要符合Spring指定的規範,然後透過架構中的BeanFactroy類,來自動實作上文所述注入過程,還是以boy與toyota為例,如下:

首先,Person類還是一樣的,

然後xml設定檔增加點東西-(假定為bean.xml):

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
   <bean id="oneCar" class="Toyota"> <!-- Toyota类是ICar的一个实现-->
   </bean>
   <bean id="onePerson" class="Person"> <!--本例以属性方式注入为例 -->
       <property name="car"> 
           <ref bean="oneCar"></ref>
       </property>
   </bean>
</beans>
登入後複製

最後,呼叫的過程,就變成如下:

BeanFactory factory=new XmlBeanFactory("bean.xml");
Person boy=(Person )factory.getBean("onePerson");
boy.drive();
登入後複製

推薦學習:《PHP影片教學

以上是php依賴注入是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板