Laravel Facade

Facade是容器中的類的靜態(tài)代理,可以調(diào)用容器中任何對象的任何方法钠导。

Route::get(‘/cache’, function(){

????????return Cache::get(‘key’);

});

要使用Facade,首先需要繼承‘Illuminate\Support\Facades\Facade’類并且實(shí)現(xiàn)一個抽象方法‘getFacadeAccessor’。

use Illuminate\Support\Facades\Facade;

class Cache extends

Facade

{

? ? /**

????*獲取組件注冊名稱

? ? *

? ? * @return string

? ? */

? ? protected static function getFacadeAccessor() {

? ? ? ? return 'cache';

? ? }

}

‘getFacadeAccessor’ 這個方法只要返回一個容器綁定類的名字即可森瘪,當(dāng)然也可以直接返回一個類如:

use

Illuminate\Support\Facades\Facade;

use Cache;

class Cache extends

Facade

{

? ? /**

????*獲取組件注冊名稱

? ? *

? ? * @return string

? ? */

? ? protected static function getFacadeAccessor() {

? ? ? ? return new Cache;

? ? }

}

Facade的核心是使用了‘__callStatic’這個魔術(shù)方法牡属,使用了這個方法之后,即可直接調(diào)用Cache中的get方法扼睬,盡管這個方法在Cache類中并不存在逮栅。

public static

function __callStatic($method, $args)

{ $instance =static::getFacadeRoot();? ? //解析出實(shí)例

? ? ? ? if (! $instance) {

? ? ? ? ? ? throw new RuntimeException('A facade root has not been set.');

? ? ? ? }

????????return$instance->$method(...$args);? ? //調(diào)用方法

}

然后以下的在Facade中的方法可以從容器中解析出對象:

public static function getFacadeRoot(){

? ? return static::resolveFacadeInstance(static::getFacadeAccessor());

}

protected static function getFacadeAccessor(){

? ? throw new RuntimeException('Facade does not implement getFacadeAccessor

????method.');

}

protected static function resolveFacadeInstance($name){

? ? if (is_object($name)) {

? ? ? ? return $name;

? ? }

? ? if (isset(static::$resolvedInstance[$name])) {?

? ? ? ? return static::$resolvedInstance[$name];

? ? }

? ? return static::$resolvedInstance[$name] = static::$app[$name];

}

其中的'getFacadeAccessor'這個方法必須被重寫,否者就會拋出異常。然后在'resolveFacadeInstance'這個方法中會先判斷是否是一個對象措伐,如果是的話就直接返回特纤。所以上文說的'getFacadeAccessor'這個方法直接返回一個對象也是可以的,奧秘就在這侥加。

然后會去判斷需要解析的對象是否已經(jīng)解析過了叫潦,如果解析過了就直接返回,否則會從容器中去解析再返回官硝,這樣不僅僅實(shí)現(xiàn)了單例矗蕊,而且還可以提升性能。

得到對象后氢架,就是直接通過對象來調(diào)用方法了傻咖。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市岖研,隨后出現(xiàn)的幾起案子卿操,更是在濱河造成了極大的恐慌,老刑警劉巖孙援,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件害淤,死亡現(xiàn)場離奇詭異,居然都是意外死亡拓售,警方通過查閱死者的電腦和手機(jī)窥摄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來础淤,“玉大人崭放,你說我怎么就攤上這事「胄祝” “怎么了币砂?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長玻侥。 經(jīng)常有香客問我决摧,道長,這世上最難降的妖魔是什么凑兰? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任掌桩,我火速辦了婚禮,結(jié)果婚禮上票摇,老公的妹妹穿的比我還像新娘拘鞋。我一直安慰自己,他們只是感情好矢门,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布盆色。 她就那樣靜靜地躺著灰蛙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪隔躲。 梳的紋絲不亂的頭發(fā)上摩梧,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音宣旱,去河邊找鬼仅父。 笑死,一個胖子當(dāng)著我的面吹牛浑吟,可吹牛的內(nèi)容都是我干的笙纤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼组力,長吁一口氣:“原來是場噩夢啊……” “哼省容!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起燎字,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤腥椒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后候衍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笼蛛,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年蛉鹿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滨砍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡榨为,死狀恐怖惨好,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情随闺,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布蔓腐,位于F島的核電站矩乐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏回论。R本人自食惡果不足惜散罕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望傀蓉。 院中可真熱鬧欧漱,春花似錦、人聲如沸葬燎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至窑邦,卻和暖如春擅威,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背冈钦。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工郊丛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瞧筛。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓厉熟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親较幌。 傳聞我的和親對象是個殘疾皇子庆猫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一襲紅衣醉臥榻上,半瞇著的眼绅络,手邊一壺酒將傾玉澤月培。半邊的金黃面具映著紅光照著綽綽約約的歌舞人影。 "今日何處消愁恩急,...
    也去閱讀 475評論 0 14
  • 回家過完年杉畜,離家去上班。 辭別多躊躇衷恭,游子苦難言此叠。
    蠻力閱讀 357評論 3 10
  • 我這個廚房殺手,一直以來是不敢涉足烘焙屆的随珠,一看到各種器具灭袁、各種原材料,還有五花八門的種類窗看,天啊茸歧,我的智商瞬間透支...
    史文文閱讀 258評論 0 0
  • 日子流水似的滑過,轉(zhuǎn)眼三年過去了显沈。新月從15歲的毛丫頭長成18歲的俏閨女软瞎,越發(fā)出落得水靈動人。那肉皮子越發(fā)白嫩拉讯,就...
    行走的大蘑菇閱讀 300評論 2 9
  • 我們在秋天邂逅涤浇, 高高的藍(lán)天上沒有云, 金黃的樹葉就落在腳邊魔慷。 我看著你只锭,你看著我, 我們不必說話院尔, 風(fēng)的語言從你...
    三水林楓閱讀 194評論 0 1