聊聊框架開發的依賴注入,容器與外觀模式(下部)
這篇文章主要介紹了關於聊聊框架開發的依賴注入,容器與外觀模式(下部),有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
#外觀模式:facade,也叫門面模式
1.用一句來說:就是將操作進行封裝,對外提供一個統一的接口
2.因為操作可能分佈在多個類中,而剛才學過的容器恰好可以將不同的類別與實現封裝起來
3.所以外觀模式與依賴容器是黃金搭檔,經常會放在一起使用
<?php /** * 用户登录的操作涉及三个操作 * 1.连接数据库 * 2.用户数据验证 * 3.输出提示信息 */ require 'container.php'; //创建Facade类,实现以上三个功能 class Facade { //连接数据库 public static function connect(Container $container) { return $container->make('db')->connect(); } //用户数据验证 public static function check(Container $container) { return $container->make('validate')->check(); } //输出提示信息 public static function display(Container $container) { return $container->make('view')->display(); } } //客户端调用 echo Facade::connect($container); echo Facade::check($container); echo Facade::display($container); //可以在外观模型中使用初始化方法事先注入容器对象,来简化客户端调用 require 'container.php'; class Facade { //创建成员属性保存容器对象 protected static $container = null; //创建初始化方法为容器对象赋值 public static function initialize(Container $container) { static::$container = $container; } /** * 因为已经在初始化方法中将容器对象导入到了当前类中, * 并且保存到了类的静态属性中,为所有类成员所共享, * 所以以下方法可直接调用不用再容器注入 * 注意:这里全部采用后期静态延迟绑定方法来访问当前容器对象 * 这主要是为了方便用户在静态继承的上下文环境中进行调用 */ //连接数据库 public static function connect() { return static::$container->make('db')->connect(); } //用户数据验证 public static function check() { return static::$container->make('validate')->check(); } //输出提示信息 public static function display() { return static::$container->make('view')->display(); } } //客户端调用 //初始化类门面类中的容器对象 Facade::initialize($container); //静态统一调用内部的方法(无须重复注入依赖容器对象啦,实现了细节隐藏,通用性更强) echo Facade::connect(); echo Facade::check(); echo Facade::display();
下面將程式碼整合在一起:
<?php //数据库操作类 class Db { //数据库连接 public function connect() { return '数据库连接成功<br>'; } } //数据验证类 class Validate { //数据验证 public function check() { return '数据验证成功<br>'; } } //视图图 class View { //内容输出 public function display() { return '用户登录成功'; } } /******************************************************************************/ //一.创建容器类 class Container { //创建属性,用空数组初始化,该属性用来保存类与类的实例化方法 public $instance = []; //初始化实例数组,将需要实例化的类,与实例化的方法进行绑定 public function bind($abstract, Closure $process) { //键名为类名,值为实例化的方法 $this->instance[$abstract] = $process; } //创建类实例 public function make($abstract, $params=[]) { return call_user_func_array($this->instance[$abstract],[]); } } /******************************************************************************/ //二、服务绑定: 将类实例注册到容器中 $container = new Container(); //将Db类绑定到容器中 $container->bind('db', function(){ return new Db(); }); //将Validate类实例绑定到容器中 $container->bind('validate', function(){ return new Validate(); }); //将View类实例绑定到容器中 $container->bind('view', function(){ return new View(); });
php從php5.3起,大量的吸收其它程式語言的優點,支援越來越多的新特性,特別是php7.0的推出,使php發到了新高度,是一個里程碑式的版本。更多優秀的php開發教學,請持續關注:php中文網(www.php.cn)。
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!
相關推薦:
以上是聊聊框架開發的依賴注入,容器與外觀模式(下部)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

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

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

華為官方消息顯示,開放原子開發者大會以「一切為了開發者」為主題,在無錫舉辦了兩天,時間為12月16日至17日會上,由開放原子開源基金會主導,華為、浪潮、DaoCloud、諧雲、青雲、颶風引擎以及OpenSDV開源聯盟、openEuler社群、OpenCloudOS社群等成員單位共同發起建置的AtomHub可信任鏡像中心正式開放公測。 AtomHub秉承共建、共治、共享的理念,旨在為開源組織和開發者提供中立、開放共建的可信開源容器鏡像中心。鑑於DockerHub等鏡像倉庫的不穩定性和不可控性,以及一些

Docker作為一種基於容器技術的輕量級虛擬化平台,已被廣泛應用於各種場景中。在生產環境中,容器的高可用性和故障自動恢復是至關重要的。本文將介紹如何使用Docker進行容器的故障復原和自動重啟,包括具體的程式碼範例。一、容器自動重啟的配置在Docker中,透過在運行容器時使用--restart選項可以啟用容器的自動重啟功能。常見的選項有:no:不自動重新啟動。默

在Windows11或10上安裝RedHatPodman請按照以下步驟使用命令提示字元或Powershell在Windows機器上安裝RedHatPodman:步驟1:檢查系統需求首先,您必須確保您的Windows系統使用最新更新運行,以便它能夠滿足運行Podman的要求。您應該使用的是Windows11或Windows10版本1709(內部版本16299)或更高版本,並且必須啟用適用於Linux2(WSL2)的Windows子系統和VM功能,好吧,如果它們尚未激活,那麼您可以使用第二步驟命令執行此

這篇文章帶大家了解一下依賴注入,介紹一下依賴注入解決的問題和它原生的寫法是什麼,並聊聊Angular的依賴注入框架,希望對大家有所幫助!

在Phalcon框架中使用依賴注入(DependencyInjection)的方法引言:在現代的軟體開發中,依賴注入(DependencyInjection)是一種常見的設計模式,旨在提高程式碼的可維護性和可測試性。而Phalcon框架作為一個快速、低耗的PHP框架,也支援使用依賴注入來管理和組織應用程式的依賴關係。本文將向您介紹如何在Phalcon框架中

C++中對STL容器排序的方法:使用sort()函數,原地排序容器,如std::vector。使用有序容器std::set和std::map,元素在插入時自動排序。對於自訂排序順序,可以使用自訂比較器類,例如按字母順序排序字串向量。

C++STL中最常見的容器類型分別是Vector、List、Deque、Set、Map、Stack和Queue。這些容器為不同的資料儲存需求提供了解決方案,例如動態數組、雙向鍊錶和基於鍵和值的關聯容器。在實戰中,我們可以使用STL容器有效率地組織和存取數據,例如儲存學生成績。

在Go中,依賴注入(DI)模式透過函數參數傳遞實現,類型包括值傳遞和指標傳遞。在DI模式中,依賴項通常以指標傳遞,以提高解耦性、減少鎖爭用和支援可測試性。透過使用指針,函數與特定實作解耦,因為它只依賴介面類型。指標傳遞還可以減少傳遞大物件的開銷,從而減少鎖爭用。此外,DI模式可以輕鬆地為使用DI模式的函數編寫單元測試,因為可以輕鬆地模擬依賴項。
