摘要:依賴注入依賴注入是個花俏的名詞,事實上是指類的依賴通過構造器或在某些情況下通過方法注入。通過服務容器來管理類依賴并進行依賴注入。其中最常見的方式叫做依賴注入,簡稱,還有一種方式叫依賴查找。也可以說,依賴被注入到對象中。
依賴注入
依賴注入是個花俏的名詞,事實上是指:類的依賴通過構造器或在某些情況下通過「setter」方法「注入」。先看一段 Laravel 控制器里的代碼實例:
users = $users; } /** * 顯示指定 ID 的用戶。 * * @param int $id * @return View */ public function show($id) { $user_info = $this->users->find($id); return view("user", ["user_info" => $user_info]); } }
Laravel 通過服務容器來管理類依賴并進行依賴注入。如果使用一個接口作為函數參數的類型提示,這個時候就需要將指定的實現綁定到接口上面:
interface EventPusher { public function send($data); }
class RedisEventPusher implements EventPusher { public function send($data) { // } }
$this->app->bind("AppContractsEventPusher", "AppServicesRedisEventPusher");
use AppContractsEventPusher; /** * 創建一個新的類實例。 * * @param EventPusher $pusher * @return void */ public function __construct(EventPusher $pusher) { $this->pusher = $pusher; }
這個就是所謂的面向接口編程,接口可以理解為一個規范、一個約束。高層模塊不直接依賴于低層模塊,它們都應該依賴于抽象(指接口)。
使用依賴注入,最重要的一點好處就是有效的分離了對象和它所需要的外部資源,使得它們松散耦合,有利于功能復用,更重要的是使得程序的整個體系結構變得非常靈活。
控制反轉控制反轉(Inversion of Control,縮寫為IoC),是面向對象編程中的一種設計原則。其中**最常見的方式叫做依賴注入(Dependency Injection,簡稱DI),還有一種方式叫“依賴查找”(Dependency Lookup)。通過控制反轉,對象在被創建的時候,由一個調控系統內所有對象的外界實體,將其所依賴的對象的引用傳遞給它。也可以說,依賴被注入到對象中。
c = new C(); // 實例化創建C類 } public function sayC() { echo $this->c->say(); // 調用C類中的方法 } } $a = new a(); $a->sayC();
當有了IoC/DI的容器后,A類不再主動去創建C了,如下圖所示:
而是被動等待,等待IoC/DI的容器獲取一個C的實例,然后反向的注入到A類中,如下圖所示:
c = $c; // 實例化創建C類 } public function sayC() { echo $this->c->say(); // 調用C類中的方法 } } $c = new C(); $a = new a(); $a->setC($c); $a->sayC();參考鏈接
類型約束
PHP 依賴注入,從此不再考慮加載順序
Java基礎:面向對象三大特征、五大原則
依賴倒置原則
PHP程序員如何理解依賴注入容器(dependency injection container)
聊一聊PHP的依賴注入(DI) 和 控制反轉(IoC)
深入探討依賴注入
服務容器
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22049.html
摘要:可以為服務提供者的方法設置類型提示。方法將在所有其他服務提供者均已注冊之后調用。所有服務提供者都在配置文件中注冊。可以選擇推遲服務提供者的注冊,直到真正需要注冊綁定時,這樣可以提供應用程序的性能。 本文最早發布于 Rootrl的Blog 導言 Laravel是一款先進的現代化框架,里面有一些概念非常重要。在上手Laravel之前,我認為先弄懂這些概念是很有必要的。你甚至需要重溫下PHP...
摘要:上面應用依賴容器后這段代碼來自從容器中取得中服務提供者看看官方的例子注冊一個服務在容器中注冊綁定。使用綁定單例有沒有發現方法其實就是往依賴容器里設置一個類。然后官方文檔也說了,就是一個服務容器,聽名字也知道了其實就是依賴容器。 其實laravel中的服務容器就是一個依賴容器,依賴容器是什么,請看下文。 依賴注入 當一個系統變復雜后,經常會遇到A類需要B類的方法,B類需要C類的方法這樣的...
摘要:框架中就是使用服務容器來實現控制反轉和依賴注入。容器依賴注入的實現實現原理需要了解的知識點閉包匿名函數匿名函數,也叫閉包函數,允許臨時創建一個沒有指定名稱的函數反射以上版本具有完整的反射,添加了對類接口函數方法和擴展進行反向工程的能力。 前言 通過實現laravel 框架功能,以便深入理解laravel框架的先進思想。 什么是服務容器 服務容器是用來管理類依賴與運行依賴注入的工具。La...
摘要:控制反轉容器控制反轉使依賴注入變得更加便捷。有瑕疵控制反轉容器是實現的控制翻轉容器的一種替代方案。容器的獨立使用即使沒有使用框架,我們仍然可以在項目中使用安裝組件來使用的控制反轉容器。在沒有給定任何信息的情況下,容器是無法實例化相關依賴的。 聲明:本文并非博主原創,而是來自對《Laravel 4 From Apprentice to Artisan》閱讀的翻譯和理解,當然也不是原汁原味...
摘要:引述最近看設計模式以及代碼,對于控制反轉以及依賴注入這些概念非常困惑,于是找了一些資料,以下是對于控制反轉的一下理解。其中最常見的方式叫做依賴注入,簡稱,還有一種方式叫依賴查找。在軟件工程中,依賴注入是種實現控制反轉用于解決依賴性設計模式。 引述 最近看設計模式以及laravel代碼,對于控制反轉以及依賴注入這些概念非常困惑,于是找了一些資料,以下是對于控制反轉的一下理解。 概念 Io...
閱讀 1458·2021-11-24 09:39
閱讀 1775·2021-11-22 15:25
閱讀 3728·2021-11-19 09:40
閱讀 3283·2021-09-22 15:31
閱讀 1288·2021-07-29 13:49
閱讀 1192·2019-08-26 11:59
閱讀 1308·2019-08-26 11:39
閱讀 919·2019-08-26 11:00