摘要:<?php //container 代码 class Db { public function connect() { return '数据库连接成功<br/>'; } } //数据验证类 class Validate { public function che
<?php
//container 代码
class Db
{
public function connect()
{
return '数据库连接成功<br/>';
}
}
//数据验证类
class Validate
{
public function check()
{
return '数据验证成功<br/>';
}
}
//视图类
class View
{
public function display()
{
return '用户登录成功<br/>';
}
}
//以上三个类当做工具类
//创建容器类
class Container
{
//创建一个空数组来保存工具类以及实现的方法
protected $instance = [];
//将需要实例化的类与它的实现方法(怎么实例化)进行绑定:将对象容器初始化
public function bind($class, Closure $new)//Closure $new定义一个闭包方法
{
$this->instane[$class]=$new;
/*$this->instance['db']=function(){ //传入的方法就是如何实例化对象,
return new db('localhost','root');
}*/
}
public function make($class,$params=[])//$params表示要传入的参数 对外调用
{
//call_user_func_array()回调一个函数,
return call_user_func_array($this->instance[$class], []]);
}
}
$container = new Container();
//将类绑定到容器中
$container->bind('db',function(){
return new Db();
});
$container->bind('validate',function(){
return new Validate();
});
$container->bind('view',function(){
return new View();
});
//Facade代码
<?php
require 'container.php';
class Facade
{
//保存容器对象
protected static $container = null;
//创建初始化方法,给容器对象赋值
public static function initalize(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 '<h3>优化后的门面统一调用</h3>';
Facade::initalize($container);//进行初始化
echo Facade::connect();
echo Facade::check();
echo Facade::display();
批改老师:查无此人批改时间:2019-03-18 09:14:53
老师总结:写的不错。门面模式的技巧,这个可以说说你的理解。老师才知道你学的怎么样。继续加油。