摘要:container.php容器类源文件代码<?php /** * 发送验证短信 * 1.涉及到三个操作:数据库操作,手机号合法性验证,发送验证短信 * 2.分别对应涉及到三个类:Db类,Validate类,Send类,这几个类都是工具类 */ //数据库操作类 class Db {  
container.php容器类源文件代码
<?php
/**
* 发送验证短信
* 1.涉及到三个操作:数据库操作,手机号合法性验证,发送验证短信
* 2.分别对应涉及到三个类:Db类,Validate类,Send类,这几个类都是工具类
*/
//数据库操作类
class Db
{
//数据库连接
public function connect()
{
return '第1步——连接数据库:数据库连接成功!<br><br>';
}
}
//手机号验证类
class Validate
{
//手机号合法性验证
public function checkMobile()
{
return '第2步——手机号验证:手机号验证成功!<br><br>';
}
}
//发送短信类
class Send
{
//发送验证短信
public function sendSms()
{
return '第3步——发送验证短信:验证短信发送成功!';
}
}
//以上三个类我们当作工具类来用
/******************************************************************************/
//一.创建容器类
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();
});
//将Send类实例绑定到容器中
$container->bind('send', function(){
return new Send();
});demo.php调用页面代码
<?php
/**
* facade:门面模式,也叫外观模式
* 1.就是将一些操作进行封装,对外提供一个统一的接口
* 2.因为操作可能分布在多个类中,而容器恰好可以将不同的类与实现封装起来
* 3.所以外观模式与依赖容器是黄金搭档,经常会放在一起使用
*/
require 'container.php';
/*
*创建Facade类,实现以下三个功能
* 1.连接数据库
* 2.手机号合法性验证
* 3.发送验证短信
* 对于调用者来说,他不需要事先知道这三个操作在哪个具体的类中,它只需要调用Facade就可以执行以上三个操作
*/
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 checkMobile()
{
return static::$container->make('validate')->checkMobile();
}
//发送验证短信
public static function sendSms()
{
return static::$container->make('send')->sendSms();
}
}
//客户端调用
//初始化类门面类中的容器对象
echo '<h1>简化后的facade调用</h1>';
echo '<h2><span style="color:red">发送验证短信</span></h2>';
Facade::initialize($container);
//静态统一调用内部的方法(无须重复注入依赖容器对象啦,实现了细节隐藏,通用性更强)
echo Facade::connect(); //数据库连接
echo Facade::checkMobile(); //手机号合法性验证
echo Facade::sendSms(); //发送验证短信
?>运行截图:

批改老师:韦小宝批改时间:2018-12-19 13:26:33
老师总结:写的很不错!代码清晰!注释明确!课后记得多练习哦!继续加油吧!