国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP中的服務容器與依賴注入的解析

2020-03-22 18:16:23
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了關于PHP中的服務容器與依賴注入,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

依賴注入當A類需要依賴于B類,也就是說需要在A類中實例化B類的對象來使用時候,如果B類中的功能發生改變,也會導致A類中使用B類的地方也要跟著修改,導致A類與B類高耦合。這個時候解決方式是,A類應該去依賴B類的接口,把具體的類的實例化交給外部。

就拿我們業務中常用的通知模塊來說。

 ?php * 定義了一個消息類 * Class Message html' target='_blank'>class Message{ public function seed() return seed email  * 訂單產生的時候 需要發送消息class Order{ protected $messager =  function __construct() $this- messager = new Message(); public function seed_msg() return $this- messager- seed();$Order = new Order();$Order- seed_msg();

上面的代碼是我們傳統的寫法。首先由個消息發送的類。然后在我們需要發送消息的地方,調用發送消息的接口。有一天你需要添加一個發送短信的接口以滿足不同的需求。那么你會發現你要再Message類里面做修改。同樣也要再Order類里面做修改。這樣就顯得很麻煩。這個時候就有了依賴注入的思路。下面把代碼做一個調整

 ?php * 為了約束我們先定義一個消息接口 * Interface Messageinterface Message{ public function seed(); * 有一個發送郵件的類 * Class SeedEmailclass SeedEmail implements Message public function seed() return seed email  // TODO: Implement seed() method. *新增一個發送短信的類 * Class SeedSMSclass SeedSMS implements Message public function seed() return seed sms  // TODO: Implement seed() method.
$Order = new Order($message);$Order- seed_msg();

這樣我們就實現了依賴注入的思路,是不是很方便擴展了。

服務容器我理解的服務容器就是一個自動產生類的工廠。
 ?php * 為了約束我們先定義一個消息接口 * Interface Messageinterface Message{ public function seed(); * 有一個發送郵件的類 * Class SeedEmailclass SeedEmail implements Message public function seed() return seed email  // TODO: Implement seed() method. *新增一個發送短信的類 * Class SeedSMSclass SeedSMS implements Message public function seed() return seed sms  // TODO: Implement seed() method.
$SMS = $message- make( SMS $SMS- seed();

container是一個簡單的服務容器里面有bind,make兩個方法
bind是向容器中綁定服務對象。make則是從容器中取出對象。

bind

在bind方法中需要傳入一個 concrete 我們可以傳入一個實例對象或者是一個閉包函數
可以看到我這全使用的是閉包函數,其實也可以這樣寫

$sms = new SeedSMS();$message- bind( SMS ,$sms);

后面這種寫法與閉包相比的區別就是我們需要先實例化對象才能往容易中綁定服務。而閉包則是我們使用這個服務的時候才去實例化對象。可以看出閉包是有很多的優勢的。

make

make方法就從容器中出去方法。里面首先判斷了instances變量中是否有當前以及存在的服務對象,如果有直接返回。如果沒有那么會通過 call_user_func_array返回一個對象。call_user_func_array的使用可以查看
PHP 中 call_user_func 的使用

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

相關推薦:

PHP容器Pimple運行流程的分析

gitbash PHP執行輸出中文亂編解決方式

PHP中常用的數組函數

以上就是PHP中的服務容器與依賴注入的解析的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肃宁县| 千阳县| 乡宁县| 延寿县| 西峡县| 临沭县| 渝中区| 双辽市| 山东省| 辉县市| 利川市| 福安市| 保康县| 永吉县| 财经| 渝北区| 张家港市| 白朗县| 周宁县| 沅江市| 横山县| 许昌市| 轮台县| 武义县| 台州市| 连江县| 舞阳县| 三门峡市| 乐都县| 四子王旗| 九台市| 河北区| 扎囊县| 黄浦区| 靖安县| 札达县| 福贡县| 舟曲县| 昌都县| 昌都县| 瓮安县|