亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

容器注入和Facade

original 2019-03-02 13:30:50 279
abstrait:以用戶登錄案例為例,工作類調用三個基本的工具類會出現嚴重藕合現象,一旦工具類發(fā)生變化,工作類就必須對應的更改設置;對工具類的實例化不要在工作類中完成,在(類或函數之外完成)客戶端完成,這樣必須在工作類中必須要有一個接收器來保存工具類的實例,將工作類依賴的對象以方法參數的方式植入到當前的類中,叫依賴注入。但依賴注入還是要在工作類的客戶端進行實例化,怎么能去掉實例化?給出一個類名以及如何去實例化衍生出

以用戶登錄案例為例,工作類調用三個基本的工具類會出現嚴重藕合現象,一旦工具類發(fā)生變化,工作類就必須對應的更改設置;對工具類的實例化不要在工作類中完成,在(類或函數之外完成)客戶端完成,這樣必須在工作類中必須要有一個接收器來保存工具類的實例,將工作類依賴的對象以方法參數的方式植入到當前的類中,叫依賴注入。但依賴注入還是要在工作類的客戶端進行實例化,怎么能去掉實例化?給出一個類名以及如何去實例化衍生出來了容器注入。

代碼實現,創(chuàng)建三個工具類

class Db
{
public function connect()
{
return 'Db連接成功<br>';
}
}

class Validate
{
public function check()
{
return '數據驗證成功<br>';
}
}

class View
{
public function display()
{
return '用戶登錄成功<br>';
}
}

容器注入基本步驟:

1,創(chuàng)建容器:將一個類和他的關聯實現綁定到一個關聯數組中

class Container
{
//創(chuàng)建一個空數組用來保存工具類及實現方法
// protected $instance = []; //創(chuàng)建一個屬性
public $instance = []; 
// $instance['類名'] = '類的實例化過程\函數';

//將需要實例化的類和它的實現方法進行綁定:降對象容器進行初始化
public function bind($abstract,Closure $process)
{
$this->instance[$abstract] = $process;
// $this->instance['db'] = function(){
//  return new Db('locahost','root','root');
}
//創(chuàng)建特定類的實例
public function make($abstract,$params=[])
{
return call_user_func_array($this->instance[$abstract],[]);
}
}

2,服務注冊:初始化這個關聯數組,將工具類綁定到容器中

//2,服務注冊:其實就是調用容器的bind方法,將對象注冊到容器中
$container = new Container();

//將Db類綁定到容器中
$container->bind('db',function(){
return new Db();
});
$container->bind('validate',function(){
return new Validate();
});
$container->bind('view',function(){
return new View();
});


3,容器依賴:也叫依賴容器,調用的時候直接傳一個容器對象即可

// 用戶類:工作類
class User
{
public function login(Container $container)
{
//$container->make('db'):實例化Db類創(chuàng)建$db對象
echo $container->make('db')->connect();
echo $container->make('validate')->check();
echo $container->make('view')->display();
}
}
$user = new User();
echo '<h3>用依賴容器來實現解藕</h3>';
echo $user->login($container);

門面Facade:

思想:將一些操作進行封裝,對外提供統(tǒng)一接口進行訪問,跟網址大全hao123差不多,

Facade類實現三個功能:1,連接數據庫; 2,數據驗證;3,輸出提示

require 'container.php';

class Facade
{
//創(chuàng)建一個靜態(tài)屬性保存容器對象
protected static $container = null;

//創(chuàng)建一個初始化方法,給容器對象賦值
public static function initialize(Container $container)
{
static::$container = $container;
}

//1,連接數據庫
public static function connect()
{
return static::$container->make('db')->connect();
}
//2,數據驗證
public static function check()
{
return static::$container->make('validate')->check();
}
//3,輸出提示
public static function display()
{
return static::$container->make('view')->display();
}
}
//客戶端調用
echo '<h3>簡化后的Facade門面統(tǒng)一調用:</h3>';
Facade::initialize($container);//初始化
echo Facade::connect($container);
echo Facade::check($container);
echo Facade::display($container);


Professeur correcteur:查無此人Temps de correction:2019-03-02 13:33:15
Résumé du professeur:完成的不錯。對外提供接口,也要做好加密,防止別人攻擊服務器,繼續(xù)加油。

Notes de version

Entrées populaires