摘要: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
老师总结:写的很不错!代码清晰!注释明确!课后记得多练习哦!继续加油吧!