php奇技技巧

網(wǎng)摘----轉(zhuǎn)

1轧苫、基礎(chǔ):一句話實(shí)現(xiàn)定義一個(gè)函數(shù)并立即調(diào)用大家在JavaScript里經(jīng)常這么搞樟遣,因?yàn)樽兞课廴臼莻€(gè)不可容忍的事兒茧妒。但是PHP里如何實(shí)現(xiàn)這樣的功能酬蹋?一個(gè)可行方法是:call_user_func(function(){ echo "hello,world";});

2及老、上下文變量在1的基礎(chǔ)上,來(lái)個(gè)有意思的:用一個(gè)匿名函數(shù)當(dāng)做匿名空間范抓,同時(shí)調(diào)用外部上下文變量:$context="hello,world";call_user_func(function()use($context){echo $context;});

等下骄恶,有沒(méi)有覺(jué)得這context的叫法有點(diǎn)像Django的感覺(jué)?嗯匕垫,完全可以利用這個(gè)方法可以包裝出一個(gè)通用的視圖方法僧鲁,但是use不能和$this直接聯(lián)用,怎么辦?既然這個(gè)($this)不讓用,就用那個(gè)($that)寞秃。參見(jiàn)第三條斟叼。

3、 use和$this在2的基礎(chǔ)之上春寿,更強(qiáng)大的用法(use當(dāng)前類對(duì)象的引用)朗涩。class Contrller {//...其他方法public function view($template_name,$context=NULL,$isShow=true){ ob_start(); $that=$this; //注意$this不能直接用于use call_user_func( //這里可以向視圖文件傳入?yún)?shù) function()use($that,$template_name,$context){ $view_path=$that->getViewPath($template_name); include $view_path; } } $out=ob_get_contents(); ob_end_clean(); if($isShow){ echo $out; }else{ return $out; }} }

事實(shí)上,這個(gè)例子用的做作了绑改,PHP5.3之后適用谢床。經(jīng) @張明同學(xué)提醒,自PHP5.4之后绢淀,可以無(wú)需使用use即可使用$this萤悴。官方文檔的參考鏈接PHP: Anonymous functions**ChangelogVersion Description **5.4.0**** $this can be used in anonymous functions. **5.3.0 Anonymous functions become available.
這真是件大快人心的大好事瘾腰!測(cè)試demo如下:class A { public $t; public function __construct($t="hello,world"){ $this->t=$t; } function test(){ call_user_func(function(){ echo $this->t; }); } } $a=new A(); $a->test();

所以皆的,對(duì)于高版本的PHP,就不用搞個(gè)$that了蹋盆。剛剛?cè)ニ蚜讼孪嚓P(guān)問(wèn)題费薄,stackoverflow上這組問(wèn)答非常值得參考,今天才發(fā)現(xiàn)栖雾,罪過(guò)罪過(guò):php - Using $this in anonymous function**又去翻了下文檔楞抡,有了這個(gè)特性之后,類似JavaScript里apply之類的this劫持也可以實(shí)現(xiàn)了析藕,這真是大快人心的事情召廷。

4、碉堡了的特性:調(diào)用那個(gè)可調(diào)用的東西調(diào)用一切可調(diào)用的東西账胧,不只是你自定義的函數(shù)竞慢。簡(jiǎn)單例子:把這個(gè)用于實(shí)現(xiàn)一個(gè)通用控制器。class Contrller{ //調(diào)用具體的action治泥, public function __act($action){ call_user_func( array($this,$action) ); }}class HelloContrller extends Controller{ public function index(){ } public function hello(){ } public function dance(){ }}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末筹煮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子居夹,更是在濱河造成了極大的恐慌败潦,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件准脂,死亡現(xiàn)場(chǎng)離奇詭異劫扒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)狸膏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門沟饥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事闷板∨炀模” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵遮晚,是天一觀的道長(zhǎng)性昭。 經(jīng)常有香客問(wèn)我,道長(zhǎng)县遣,這世上最難降的妖魔是什么糜颠? 我笑而不...
    開(kāi)封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮萧求,結(jié)果婚禮上其兴,老公的妹妹穿的比我還像新娘。我一直安慰自己夸政,他們只是感情好元旬,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著守问,像睡著了一般匀归。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上耗帕,一...
    開(kāi)封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天穆端,我揣著相機(jī)與錄音,去河邊找鬼仿便。 笑死体啰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嗽仪。 我是一名探鬼主播荒勇,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钦幔!你這毒婦竟也來(lái)了枕屉?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鲤氢,失蹤者是張志新(化名)和其女友劉穎搀擂,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體卷玉,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哨颂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了相种。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片威恼。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出箫措,到底是詐尸還是另有隱情腹备,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布斤蔓,位于F島的核電站植酥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏弦牡。R本人自食惡果不足惜友驮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驾锰。 院中可真熱鬧卸留,春花似錦、人聲如沸椭豫。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捻悯。三九已至匆赃,卻和暖如春淤毛,著一層夾襖步出監(jiān)牢的瞬間今缚,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工低淡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姓言,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓蔗蹋,卻偏偏與公主長(zhǎng)得像何荚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猪杭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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