• 技术文章 >后端开发 >php教程

    聊聊框架开发的依赖注入,容器与外观模式(下部)

    不言不言2018-07-14 13:47:45原创604
    这篇文章主要介绍了关于聊聊框架开发的依赖注入,容器与外观模式(下部),有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

    外观模式:facade,也叫门面模式

    1.用一句来说:就是将操作进行封装,对外提供一个统一的接口

    2.因为操作可能分布在多个类中,而刚才学过的容器恰好可以将不同的类与实现封装起来

    3.所以外观模式与依赖容器是黄金搭档,经常会放在一起使用

    <?php 
    /**
     * 用户登录的操作涉及三个操作
     * 1.连接数据库
     * 2.用户数据验证
     * 3.输出提示信息
     */
    require 'container.php';
    //创建Facade类,实现以上三个功能
    class Facade
    {
    //连接数据库
    public static function connect(Container $container)
    {
    return $container->make('db')->connect();
    }
    //用户数据验证
    public static function check(Container $container)
    {
    return $container->make('validate')->check();
    }
    //输出提示信息
    public static function display(Container $container)
    {
    return $container->make('view')->display();
    }
    }
    //客户端调用
    echo Facade::connect($container);
    echo Facade::check($container);
    echo Facade::display($container);
    //可以在外观模型中使用初始化方法事先注入容器对象,来简化客户端调用
    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();

    下面将代码整合在一起:

    <?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从php5.3起,大量的吸收其它编程语言的优点,支持越来越多的新特性,特别是php7.0的推出,使php发到了新高度,是一个里程碑式的版本。更多优秀的php开发教程,请持续关注:php中文网(m.sbmmt.com)。

    以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

    相关推荐:

    聊聊框架开发的依赖注入,容器与外观模式(上部)

    聊聊框架开发的依赖注入,容器与外观模式(中部)

    以上就是聊聊框架开发的依赖注入,容器与外观模式(下部)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:依赖注入 容器
    上一篇:聊聊框架开发的依赖注入,容器与外观模式(中部) 下一篇:关于PHP条件运算符遇到的一个问题及解决方法
    大前端线上培训班

    相关文章推荐

    • 带你分清类中的构造函数与析构函数• PHP中的命名空间定义与使用(实例详解)• PHP中clone关键字和__clone()方法的使用(实例详解)• 怎样去搞定PHP类的继承?(总结分享)• 五分钟带你了解PHP中的魔术方法(实例详解)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网