聊聊架構開發的依賴注入,容器與面板模式(下部)

來源:互聯網
上載者:User
這篇文章主要介紹了關於聊聊架構開發的依賴注入,容器與面板模式(下部),有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

面板模式: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;}/*** 因為已經在初始化方法中將容器物件匯入到了當前類中,* 並且儲存到了類的靜態屬性中,為所有類成員所共用,* 所以以下方法可直接調用不用再容器注入* 注意:這裡全部採用後期靜態延遲Binder 方法來訪問當前容器物件* 這主要是為了方便使用者在靜態繼承的上下文環境中進行調用*///串連資料庫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)。

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.