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

Facade(门面/外观模式):

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

    优点:

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

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

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

TP5源码:IOC容器及Facade深度解析(二)_第1张图片

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

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

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

TP5源码:IOC容器及Facade深度解析(二)_第2张图片

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

TP5源码:IOC容器及Facade深度解析(二)_第3张图片

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

TP5源码:IOC容器及Facade深度解析(二)_第4张图片

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

TP5源码:IOC容器及Facade深度解析(二)_第5张图片

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

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

TP5源码:IOC容器及Facade深度解析(二)_第6张图片

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

一张神奇的思维导图

你可能感兴趣的:(TP5源码:IOC容器及Facade深度解析(二))