溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP中匿名函數(shù)的作用是什么

發(fā)布時間:2021-06-30 15:31:21 來源:億速云 閱讀:163 作者:Leah 欄目:編程語言

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)PHP中匿名函數(shù)的作用是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

◆字符串的函數(shù)名

◆使用create_function的返回

51CTO推薦專題:PHP開發(fā)基礎(chǔ)入門

在PHP5.3以后, 我們多了一個選擇, 也就是Closure。

$func = function () { ... };  array_walk($arr, $func);

從實現(xiàn)上來說, ***種方式: 傳遞函數(shù)名字符串是最簡單的。而第二種方式create_function, 其實和***種方式本質(zhì)上一樣的, create_function返回一個字符串的函數(shù)名, 這個函數(shù)名的格式是:

"\000_lambda_" . count(anonymous_functions)++

我們來看看create_function的實現(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ù)。

我們來驗證下:

<?php create_function("", 'echo __FUNCTION__;');  call_user_func("\000lambda_1", 1);  ?> //輸出  __lambda_fun

因為在eval的時候, 函數(shù)名是”__lambda_func”, 所以匿名函數(shù)內(nèi)會輸出__lambda_func, 而因為***用”\000_lambda_”.count(anonymous_functions)++重命名了函數(shù)表中的”__lambda_func”函數(shù), 所以可通過”\000_lambda_” . count(anonymous_functions)++調(diào)用這個匿名函數(shù)。為了證實這一點, 可以將create_function的返回值dump出來查看。

而在PHP 5.3發(fā)布的時候, 其中有一條new feature就是支持閉包/Lambda Function, 我***反應(yīng)是以為zval新增了一個IS_FUNCTION, 但實際上是構(gòu)造了一個PHP 5.3引入的Closure”類”的實例, Closure類的構(gòu)造函數(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) "<required>"  }  }  */

上述就是小編為大家分享的PHP中匿名函數(shù)的作用是什么了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI