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

類似用戶登錄驗(yàn)證的案例,依賴注入和facede。比較復(fù)雜(不是很理解)

原創(chuàng) 2019-02-17 22:39:18 283
摘要://理解圖//繞來(lái)饒去,借以圖來(lái)理解//face.php <?php //工具類---》實(shí)例化--》放入容器類---》實(shí)例化對(duì)象 //容器類被被外部調(diào)用--》 //導(dǎo)入容器 require 'container.php'; //容器 class Facade { //創(chuàng)建成員屬性保存容器對(duì)象 protected static&nbs

//理解圖

//繞來(lái)饒去,借以圖來(lái)理解

ccccc.png

//face.php
<?php
//工具類---》實(shí)例化--》放入容器類---》實(shí)例化對(duì)象
//容器類被被外部調(diào)用--》


//導(dǎo)入容器
require 'container.php';


//容器
class Facade
{	
	//創(chuàng)建成員屬性保存容器對(duì)象
	protected static $container = null;

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

	/**
	 * 因?yàn)橐呀?jīng)在初始化方法中將容器對(duì)象導(dǎo)入到了當(dāng)前類中,
	 * 并且保存到了類的靜態(tài)屬性中,為所有類成員所共享,
	 * 所以以下方法可直接調(diào)用不用再容器注入
	 * 注意:這里全部采用后期靜態(tài)延遲綁定方法來(lái)訪問當(dāng)前容器對(duì)象
	 * 這主要是為了方便用戶在靜態(tài)繼承的上下文環(huán)境中進(jìn)行調(diào)用
	 */
	//連接數(shù)據(jù)庫(kù)
	public static function connect($db)
	{
		return static::$container->make($db)->connect();
	}

	//用戶數(shù)據(jù)驗(yàn)證
	public static function check($validate)
	{
		return static::$container->make($validate)->check();
	}

	//輸出提示信息
	public static function display($view)
	{
		return static::$container->make($view)->display();
	}
}

//初始化類門面類中的容器對(duì)象
Facade::initialize($container);

//靜態(tài)統(tǒng)一調(diào)用內(nèi)部的方法(無(wú)須重復(fù)注入依賴容器對(duì)象啦,實(shí)現(xiàn)了細(xì)節(jié)隱藏,通用性更強(qiáng))
echo Facade::connect('db');
echo Facade::check('validate');
echo Facade::display('view');

//container.php

<?php 

//數(shù)據(jù)庫(kù)操作類
class Db
{
	//數(shù)據(jù)庫(kù)連接
	public function connect()
	{
		return '數(shù)據(jù)庫(kù)連接成功<br>';
	}
}

//數(shù)據(jù)驗(yàn)證類
class Validate
{
	//數(shù)據(jù)驗(yàn)證
	public function check()
	{
		return '數(shù)據(jù)驗(yàn)證成功<br>';
	}
}

//視圖圖
class View
{
	//內(nèi)容輸出
	public function display()
	{
		return '用戶登錄成功';
	}
}

/******************************************************************************/

//一.創(chuàng)建容器類
class Container
{
	//創(chuàng)建屬性,用空數(shù)組初始化,該屬性用來(lái)保存類與類的實(shí)例化方法
	public $instance = [];

	//初始化實(shí)例數(shù)組,將需要實(shí)例化的類,與實(shí)例化的方法進(jìn)行綁定
	public function bind($abstract, Closure $process)
	{
		//鍵名為類名,值為實(shí)例化的方法
		$this->instance[$abstract] = $process;
	}

	//創(chuàng)建類實(shí)例
	public function make($abstract, $params=[])
	{
		return call_user_func_array($this->instance[$abstract],[]);
	}

}

/******************************************************************************/

//二、服務(wù)綁定: 將類實(shí)例注冊(cè)到容器中
$container = new Container(); 

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

//將Validate類實(shí)例綁定到容器中
$container->bind('validate', function(){
	return new Validate();
});

//將View類實(shí)例綁定到容器中
$container->bind('view', function(){
	return new View();
});


//重點(diǎn)是代碼之間的高度復(fù)用,解決后期維護(hù)性

批改老師:天蓬老師批改時(shí)間:2019-02-18 10:55:38
老師總結(jié):依賴注入與容器,簡(jiǎn)單來(lái)講, 就是 把對(duì)象的創(chuàng)建過(guò)程, 全部集中管理,放在容器中, 需要的時(shí)候,直接到容器中取出來(lái)就可以, 千萬(wàn)不要想的太復(fù)雜, 原本這是用來(lái)簡(jiǎn)化開發(fā)的工具, 如果最終使開發(fā)變得復(fù)雜,就沒意義了, 還不如不用它, 你說(shuō)呢?

發(fā)佈手記

熱門詞條