美文网首页
TP5源码:IOC容器及Facade深度解析(二)

TP5源码:IOC容器及Facade深度解析(二)

作者: 机智的老刘明同志 | 来源:发表于2019-10-22 00:28 被阅读0次

    Facade(门面/外观模式):

            为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层次的接口,使得子系统更加容易使用(ps : 我感觉就是单纯的给业务逻辑包了一层)

        优点:

           (1)对于调用者来说,访问代码变得简洁、非常方便

           (2)由于只在一个地方调用子系统,减少了出错的可能

           (3)Facade类还能使调用者避免不正确地使用内部方法,从而减少错误的发生

    TP5.1是如何实现Facade的呢?

            实际上tp5.1中facade最大的优点就是可以静态调用类中的一些非静态方法

            比如下图的\Config::get("app.")    (ps:我们通过phpStorm居然没办法直接跳到\Config类)    

            原来public/index.php引入了base.php文件,追加了几个类型别名。Config类实际上指向的是facade\Config::class类

            跳转过去,我们发现facade目录下有有很多继承了 Facade 类的子类

            可是我们在facade\Config类以及他的父类Facade类中并没有发现get方法。这是因为他们实际上触发的是 __callStatic魔术方法( __callStatic : 静态调用一个不存在的方法时触发)

            call_user_func_array: 全局函数回调。参数1:array(类,方法名) 参数2:所有的参数

            最终又执行了createFacade方法,使用容器类生成了一个新类(实际上是走的新生成的类的get方法)

            最后一张思维导图送给大家

    一张神奇的思维导图

    相关文章

      网友评论

          本文标题:TP5源码:IOC容器及Facade深度解析(二)

          本文链接:https://www.haomeiwen.com/subject/clyzmctx.html