facade和容器例子

原创 2018-12-17 17:23:57 250
摘要:<?php  //container.php //数据库操作类 class Db { public function connect() { return '数据库连接成功<br>'; } } //数据验证类 class Validate { public function&nbs
<?php 
//container.php
//数据库操作类
class Db
{
	public function connect()
	{
		return '数据库连接成功<br>';
	}
}

//数据验证类
class Validate
{
	public function check()
	{
		return '数据验证成功<br>';
	}
}

//视图图
class View
{
	public function display()
	{
		return '用户登录成功';
	}
}

//创建容器类
class Container
{
	//创建属性,用空数组初始化
	public $instance = [];

	public function bind($abstract, Closure $process)
	{
		//键名为类名,值为实例化的方法
		$this->instance[$abstract] = $process;
	}

	//创建类实例
	public function make($abstract, $params=[])
	{
		return call_user_func_array($this->instance[$abstract],[]);
	}

}

//服务绑定: 将类实例注册到容器中
$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();
});
?>



<?php 
//facade
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();
}
}

Facade::initialize($container);
echo Facade::connect();
echo Facade::check();
echo Facade::display();


批改老师:天蓬老师批改时间:2018-12-17 17:32:56
老师总结:门面也叫外观模式, 可以将类中方法的调用方式统一, 但也会带来性能的损失, 不必滥用

发布手记

热门词条