我自己看源码的原则: 先要知道学习一些你不认识的函数,或者魔术方法和套路 有了这些套路之后,你在全局看大体的思路,源码不求细看,拆分不同的代码块,每个代码块大概是什么意思。
门面的基本使用
比如 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)调用方法