在PHP中,依賴注入是指對類別的依賴透過建構器完成自動注入。控制器架構方法與操作方法中一旦對參數進行物件類型約束則會自動除法依賴注入,由於存取控制器的參數都來自與URL請求,普通變數就是透過參數綁定自動獲取,物件變數則是透過依賴注入生成。
本文操作環境: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中實施API速率限制的策略,包括諸如令牌桶和漏水桶等算法,以及使用Symfony/Rate-limimiter之類的庫。它還涵蓋監視,動態調整速率限制和手

本文討論了使用password_hash和pyspasswify在PHP中使用密碼的好處。主要論點是,這些功能通過自動鹽,強大的哈希算法和SECH來增強密碼保護

本文討論了OWASP在PHP和緩解策略中的十大漏洞。關鍵問題包括注射,驗證損壞和XSS,並提供用於監視和保護PHP應用程序的推薦工具。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

記事本++7.3.1
好用且免費的程式碼編輯器

Dreamweaver CS6
視覺化網頁開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3漢化版
中文版,非常好用