使用facade统一容器中的方法调用,并且使用简化facade门面模式的技巧

原创 2018-11-26 16:37:48 222
摘要://container.php <?php /**   * 容器:也叫服务容器(IOC) * 基本思想:拿来就用,最大限度简化外部对象调用,类似于:即插即用 * 基本实现分三步: * 1,创建容器:本质就是讲一个类与它的实现绑定到一个关联数组; * 2,服务注册:初始化这个关联数组,将工具类绑定到容器中; * 3
//container.php
<?php
/**  
* 容器:也叫服务容器(IOC)
* 基本思想:拿来就用,最大限度简化外部对象调用,类似于:即插即用
* 基本实现分三步:
* 1,创建容器:本质就是讲一个类与它的实现绑定到一个关联数组;
* 2,服务注册:初始化这个关联数组,将工具类绑定到容器中;
* 3,容器依赖:也叫依赖容器,调用的时候直接传一个容器对象即可,不用再一个一个传具体对象
*/

//数据库操作类
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($abstract,Closure $process)
{
$this->instance[$abstract] = $process;
}

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

//二、服务注册:其实就是调用容器的bing()将对象注册到容器中
$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();
});

?>


//demo5.php

<?php
//在外观模式facade中,创建一个初始化方法实现注入容器,来简化代码
require 'container.php';


class Facade
{
   //保存容器对象
   protected static $container = null;

   //创建初始化方法,给容器对象赋值
   public static function initialize(Container $container)
   {
       static::$container = $container;
   }

   //1,链接数据库
   public static function connect()
   {
       return static::$container->make('db')->connect();
   }

   //2,数据验证
   public static function check()
   {
       return static::$container->make('validate')->check();
   }

   //3,输出提示
   public static function display()
   {
       return static::$container->make('view')->display();
   }
}

//客户端调用
echo '<h3>简化后facade调用:</h3>';
Facade::initialize($container);
echo Facade::connect();
echo Facade::check();
echo Facade::display();


批改老师:天蓬老师批改时间:2018-11-26 17:16:27
老师总结:门面技术,也叫外观模式, 学完这些基础内容后,如果想进阶的话, 必须学习php中的反射技术, 现代容器技术是包依赖的载体,而容器成员的调用 ,几乎离不开反射, 向上吧,少年

发布手记

热门词条