1. 程式人生 > >PHP 控制反轉與依賴注入詳細分析與程式碼實現

PHP 控制反轉與依賴注入詳細分析與程式碼實現

PHP有很多的設計模式,比如單例模式,訂閱模式,策略模式,工廠模式,觀察者模式,這些設計模式其實無非都是為了讓程式簡化,容易維護,模組間解耦。現在我們來講講PHP的另外一種設計模式,控制反轉/依賴注入,這兩者其實是同一個概念,只是凶不同的角度去解釋的而已。

依賴注入:是從需要實現的業務邏輯上面去解釋的,你實現這個邏輯,需要將寫好的某個模組,也就是你依賴的功能服務者,注入到程式容器中去,然後去使用這個注入的依賴。

控制反轉:是從容器方面來解釋的,在你去注入依賴的時候,其實不是業務程式自己去一個一個的去注入的,而是容器將注入進來的依賴反注入到程式中去,這個反注入的含義其實就是執行某個依賴的中的方法(一般都是所有依賴都要約定的方法,比如register),將這個依賴所需要的一些屬性,引數等,再次注入到容器中,這個過程就有點反過來的意思,控制反轉就是這麼來的。
 

下面我們來看看程式的實現。。。

比如微信支付的依賴服務

在使用的時候可以new一下容易締造類,它會自動去注入這些服務,

 這個時候容器就會呼叫register方法去注入對應的依賴服務

然而,容器裡面的register方法其實是將注入進來的依賴服務裡面的約定好的方法實現, 

 這個依賴服務裡面的這個方法其實就是講服務需要的一些東西注入到容器裡面,注意,他傳入的是$this,這個$this其實就是容器container 自己本身。這樣就實現了控制反轉/依賴注入。

理解有限,有不同的看法,歡迎指正。