外觀模式:facade,也叫門面模式
1.用一句來說:就是將操作進行封裝,對外提供一個統一的接口
2.因為操作可能分布在多個類中,而剛才學過的容器恰好可以將不同的類與實現封裝起來
3.所以外觀模式與依賴容器是黃金搭檔,經常會放在一起使用
?php * 用戶登錄的操作涉及三個操作 * 1.連接數據庫 * 2.用戶數據驗證 * 3.輸出提示信息require container.php //創建Facade類,實現以上三個功能html' target='_blank'>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.49028c.com)。
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !
相關推薦:
聊聊框架開發的依賴注入,容器與外觀模式(上部)
聊聊框架開發的依賴注入,容器與外觀模式(中部)
以上就是聊聊框架開發的依賴注入,容器與外觀模式(下部)的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答