abstrait:db類class Db{ protected $content=null; public function __construct($config) { &
db類
class Db{ protected $content=null; public function __construct($config) { $dns = $config['type'].':host='.$config['host'].';dbname='.$config['dbname'].';charset='.$config['charset']; $pdo=new PDO($dns,$config['uname'],$config['pwd']); $this->content = $pdo; } public function lanjie(){ echo '數(shù)據(jù)庫連接成功'; } }
validate 類
class Validate{ public function vali(){ return '驗(yàn)證成功'; } }
view 類
class View{ public function jump(){ return '跳轉(zhuǎn)到首頁了'; } }
container類
require 'Db.php'; require 'Validate.php'; require 'View.php'; class Container{ //創(chuàng)建一個(gè)空數(shù)組來保存工具類及實(shí)現(xiàn)方法 protected $instance=[]; //將需要實(shí)例化的類與它的實(shí)現(xiàn)方法進(jìn)行綁定;將對象容器實(shí)例化 public function bind($abstract,Closure $process){ $this->instance[$abstract]=$process; } //創(chuàng)建特定類的實(shí)例 public function make($abstract,$params=[]){ return call_user_func_array($this->instance[$abstract],$params); } } $container = new Container(); ////綁定db類 $config=['type'=>'mysql','host'=>'127.0.0.1','dbname'=>'test','charset'=>'utf8','uname'=>'root','pwd'=>'root']; //綁定db $container->bind('Db',function ()use($config){ return new Db($config); }); //綁定驗(yàn)證類 $container->bind('Validate',function (){ return new Validate(); }); //綁定視圖類 $container->bind('View',function (){ return new View(); });
facde 類
require 'Container.php'; class Facde{ protected static $container =null; public static function initialize(Container $container){ static::$container=$container; } //連接數(shù)據(jù)庫 public static function content(){ return static::$container->make('Db',[])->lanjie(); } //驗(yàn)證 public static function Validate(){ return static::$container->make('Validate')->vali(); } //試圖 public static function View(){ return static::$container->make('View')->jump(); } } echo "<h1>使用facde</h1>"; Facde::initialize($container); echo Facde::content(),'<br>'; echo Facde::Validate(),'<br>'; echo Facde::View(),'<br>';
效果圖:
總結(jié):先把單獨(dú)的工具類放入 容器中,事先綁定。然后在 門臉類中用一個(gè)靜態(tài)屬性來保存容器類的實(shí)例 ,然后 使用一個(gè)初始化方法 依賴注入 容 器類, 門臉類中的 靜態(tài)方法就是工具類的方法。這樣就能引入 門臉類后直接靜態(tài)調(diào)用了
Professeur correcteur:天蓬老師Temps de correction:2019-04-01 10:03:22
Résumé du professeur:所謂簡化, 本質(zhì)上將一些常用操作,封裝到一個(gè)靜態(tài)方法中調(diào)用