1. 簡介
門面為服務(wù)器容器提供了“靜態(tài)接口”雇初,La的門面(facades)作為服務(wù)器容器中的底層類的“靜態(tài)代理”,相比如傳統(tǒng)的靜態(tài)方法啊,在維護(hù)中更容易測試更靈活。La的所有門面都定義在 Illuminate\Support\Facades命名空間下寒跳。
2. 什么時(shí)候使用門面
1. 最危險(xiǎn)的就是類范圍蠕變 ,注意控制類的大小竹椒。
2. 在構(gòu)建與La交互的第三方擴(kuò)展包時(shí)童太,最好注入的是契約而不是門面,因?yàn)閿U(kuò)展包在La以外構(gòu)建胸完,你不能通過訪問La門面測試輔助函數(shù)
3. 門面的原理
門面就是一個(gè)為容器中對(duì)象提供訪問方式的類书释。所有的門面都繼承了Illuminate\Support\Facades\Facade基類,門面類只需要實(shí)現(xiàn)一個(gè)方法: getDacadeAccessor,它定義了從容器中解析什么赊窥,然后Facade基類使用魔術(shù)方法——callStatiac()從你的門面中調(diào)用解析對(duì)象爆惧。我們對(duì)門面的所有調(diào)用都會(huì)被傳遞給 Laravel 緩存服務(wù)的底層實(shí)例。
Cache門面繼承Facade基類并定義了getFacadeAccessor方法锨能,該方法的工作就是返回服務(wù)容器綁定類的別名扯再,當(dāng)用戶引用Cache類的任何靜態(tài)方法時(shí),Laravel 從服務(wù)容器中解析cache綁定址遇,然后在解析出的對(duì)象上調(diào)用所有請(qǐng)求方法
調(diào)用門面靜態(tài)方法-->根據(jù)getFacadeAccessor獲取綁定解析-->調(diào)用解析對(duì)象的請(qǐng)求方法熄阻。代理靜態(tài)