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方法)
最后一张思维导图送给大家
一张神奇的思维导图
网友评论