laravel的门面原理

90 阅读1分钟

我自己看源码的原则: 先要知道学习一些你不认识的函数,或者魔术方法和套路 有了这些套路之后,你在全局看大体的思路,源码不求细看,拆分不同的代码块,每个代码块大概是什么意思。


门面的基本使用

比如 Route::get("/get",xxxx)

问题来了1为什么一个Route就能找到 Illuminate\Support\Facades\Route
问题2 ::get方法什么时候被触发的

不知道的语法和套路


	1 __callStatic 静态方法不存在的时候会触发
       2 class_alias 方法给起别名

__callStatic

就是调用静态方法 这个类不存在这个静态方法的时候触发

class ClassA{
  __callStatic(method,args){
    
   } 
}
ClassA::aaa(1);  你会 发现 没有aaa这个方法 自动触发 callstatic 
method aaa
args 1;

class_alias

直接给类一个别名

class Aaaa{}
class_alias('Aaaa','Bbbb')
那么你可以使用Bbbb了

我们的config/app文件下 有一个alias的数组维护,底层larabelJ就是使用class_alias给他起别名 所有Route的时候 他会去找 Illuminate\Support\Facades\Route


Route::get 我们要定义一个门面必须基础类Facade Facade要求实现 getFacadeAccessor方法 这个方法返回类的名称'route' 在基础facade类中 从写了 __callStatic 这个方法在你调用方法get的时候触发
在这方法内部

1 $appKey=static::getFacadeAccessor方法()得到    
2  app->instance($appKey)在容器中获取实例    
3  app->instance($appKey)->methods(args)调用方法