這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)PHP中匿名函數(shù)的作用是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)長期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為昌寧企業(yè)提供專業(yè)的成都網(wǎng)站制作、做網(wǎng)站,昌寧網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
◆字符串的函數(shù)名
◆使用create_function的返回
51CTO推薦專題:PHP開發(fā)基礎(chǔ)入門
在PHP5.3以后, 我們多了一個選擇, 也就是Closure。
$func = function () { ... }; array_walk($arr, $func);
從實(shí)現(xiàn)上來說, ***種方式: 傳遞函數(shù)名字符串是最簡單的。而第二種方式create_function, 其實(shí)和***種方式本質(zhì)上一樣的, create_function返回一個字符串的函數(shù)名, 這個函數(shù)名的格式是:
"\000_lambda_" . count(anonymous_functions)++
我們來看看create_function的實(shí)現(xiàn)步驟:
1. 獲取參數(shù), 函數(shù)體;
2. 拼湊一個"function __lambda_func (參數(shù)) { 函數(shù)體;} "的字符串;
3. eval;
4. 通過__lambda_func在函數(shù)表中找到eval后得到的函數(shù)體, 找不到就出錯;
5. 定義一個函數(shù)名:"\000_lambda_" . count(anonymous_functions)++;
6. 用新的函數(shù)名替換__lambda_func;
7. 返回新的函數(shù)。
我們來驗(yàn)證下:
//輸出 __lambda_fun
因?yàn)樵趀val的時候, 函數(shù)名是”__lambda_func”, 所以匿名函數(shù)內(nèi)會輸出__lambda_func, 而因?yàn)?**用”\000_lambda_”.count(anonymous_functions)++重命名了函數(shù)表中的”__lambda_func”函數(shù), 所以可通過”\000_lambda_” . count(anonymous_functions)++調(diào)用這個匿名函數(shù)。為了證實(shí)這一點(diǎn), 可以將create_function的返回值dump出來查看。
而在PHP 5.3發(fā)布的時候, 其中有一條new feature就是支持閉包/Lambda Function, 我***反應(yīng)是以為zval新增了一個IS_FUNCTION, 但實(shí)際上是構(gòu)造了一個PHP 5.3引入的Closure”類”的實(shí)例, Closure類的構(gòu)造函數(shù)是私有的, 所以不能被直接實(shí)例化, 另外Closure類是Final類, 所以也不能做為基類派生子類.
//php-5.3.0 $class = new ReflectionClass("Closure"); var_dump($class->isInternal()); var_dump($class->isAbstract() ); var_dump($class->isFinal()); var_dump($class->isInterface()); //輸出: bool(true) bool(false) bool(true) bool(false) ?>
而PHP 5.3中對閉包的支持, 也僅僅是把要保持的外部變量, 做為Closure對象的”Static屬性”(并不是普通意義上的可遍歷/訪問的屬性).
//php-5.3.0 $b = "laruence"; $func = function($a) use($b) {}; var_dump($func); /* 輸出: object(Closure)#1 (2) { ["static"]=> array(1) { ["b"]=> string(8) "laruence" } ["parameter"]=> array(1) { ["$a"]=> string(10) "" } } */
上述就是小編為大家分享的PHP中匿名函數(shù)的作用是什么了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。