abstrait:1.容器container.php<?php//容器:也叫服務(wù)容器//1.創(chuàng)建容器:本質(zhì)就是一個(gè)類與它的實(shí)現(xiàn)綁定到一個(gè)關(guān)聯(lián)數(shù)組//2.服務(wù)注冊:初始化這個(gè)關(guān)聯(lián)數(shù)組,將工具類綁定到容器中;//3.容器依賴:也叫依賴容器,調(diào)用的時(shí)候直接傳一個(gè)容器對象即可,不用一個(gè)一個(gè)傳具體對象class Db{ public function connect() &nbs
1.容器container.php
<?php
//容器:也叫服務(wù)容器
//1.創(chuàng)建容器:本質(zhì)就是一個(gè)類與它的實(shí)現(xiàn)綁定到一個(gè)關(guān)聯(lián)數(shù)組
//2.服務(wù)注冊:初始化這個(gè)關(guān)聯(lián)數(shù)組,將工具類綁定到容器中;
//3.容器依賴:也叫依賴容器,調(diào)用的時(shí)候直接傳一個(gè)容器對象即可,不用一個(gè)一個(gè)傳具體對象
class Db
{
public function connect()
{
return '數(shù)據(jù)庫連接成功<br>';
}
}
class Validate
{
public function check()
{
return '數(shù)據(jù)驗(yàn)證成功<br>';
}
}
class View
{
public function display()
{
return '用戶登錄成功';
}
}
class Container
{
// 創(chuàng)建一個(gè)空數(shù)組來保存工具類以及實(shí)現(xiàn)方法
public $instance = [];
// protected $instance = [];
// $instance['類名']='類的實(shí)例化過程';
//將需要實(shí)例化的類與它的實(shí)現(xiàn)方法進(jìn)行綁定:將對象容器初始化
public function bind($abstract, Closure $process)
{
$this->instance[$abstract] = $process;
// $this->instance['db'] = function(){
// return new Db();
// }
}
// 創(chuàng)建特定類的實(shí)例
public function make($abstract, $params = [])
{
return call_user_func_array($this->instance[$abstract], []);
}
}
//二、服務(wù)注冊:其實(shí)就是調(diào)用容器的bind()將對象注冊到容器中
$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();
});
2.facade
<?php
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();
}
}
echo '<h1 style="color:red">簡化后的,使用外觀模式Facade門面統(tǒng)一調(diào)用</h1>';
Facade::initialize($container);
echo Facade::connect();
echo Facade::check();
echo Facade::display();
Professeur correcteur:天蓬老師Temps de correction:2019-05-15 13:31:20
Résumé du professeur:設(shè)計(jì)模型是前輩們, 對于一些常見問題總結(jié)出來的解決方案, 值得學(xué)習(xí)