abstrait:<?php //數(shù)據(jù)庫(kù)連接過(guò)程 class Db { public function connect() { return '連接數(shù)據(jù)庫(kù)====》成功&
<?php //數(shù)據(jù)庫(kù)連接過(guò)程 class Db { public function connect() { return '連接數(shù)據(jù)庫(kù)====》成功 !<br>'; } } //驗(yàn)證過(guò)程 class Validate { public function check() { return '驗(yàn)證通過(guò)====》成功 !<br>'; } } //登陸顯示信息 class View { public function display() { return '登陸成功====》成功 !<br>'; } } //創(chuàng)建容器類(lèi) class Container { // 創(chuàng)建容器屬性,用關(guān)聯(lián)數(shù)組保存類(lèi)或類(lèi)實(shí)例化方法 public $instance=[]; // 對(duì)$instance[] 寫(xiě)入,綁定 public function bind($login,Closure $process) { $this->instance[$login]=$process; } // 對(duì)$instance[] 讀取,實(shí)例化對(duì)應(yīng)的關(guān)聯(lián)數(shù)組中的類(lèi)名 public function make($login,$params=[]) { return call_user_func_array($this->instance[$login],[]); } } //實(shí)例化容器后對(duì)容器綁定外部類(lèi) $container = new Container(); $container ->bind('db',function (){ return new Db(); }); $container ->bind('validate',function (){ return new Validate(); }); $container->bind('view',function (){ return new View(); });
<?php /** * Created by PhpStorm. * User: 普通用戶 * Date: 2019/6/23 * Time: 17:44 */ require 'facade.php'; class Facade { // 保存初始化容器類(lèi),靜態(tài)定義可讓類(lèi)方法訪問(wèn) protected static $container =null; //初始化獲取容器類(lèi),方便類(lèi)內(nèi)其他方法重新獲取 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類(lèi) Facade::initialize($container); //訪問(wèn)facade類(lèi) echo Facade::connect(); echo Facade::check(); echo Facade::display();
本章節(jié)對(duì)之前的依賴注入知識(shí)又重新重溫一遍,可見(jiàn)依賴注入在開(kāi)發(fā)中比較重要,經(jīng)過(guò)學(xué)習(xí)對(duì)高度藕合的問(wèn)題在后續(xù)開(kāi)發(fā)中盡量避免,另外運(yùn)用facade類(lèi)實(shí)現(xiàn)不需要對(duì)基類(lèi)實(shí)例化后再訪問(wèn)而方便的使用靜態(tài)直接訪問(wèn)
Professeur correcteur:天蓬老師Temps de correction:2019-06-24 10:07:55
Résumé du professeur:這類(lèi)門(mén)面代碼與容器模型是緊密結(jié)合在一起的, 一定要結(jié)合 起來(lái)理解和學(xué)習(xí)