程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP中的閉包(匿名函數)淺析

PHP中的閉包(匿名函數)淺析

編輯:PHP綜合

閉包也叫匿名函數 PHP5.3 引入。

使用方法

需要調整數組元素中的值
復制代碼 代碼如下:
$data = range(0, 100);//想要每個元素的值都加上.html的後綴
$suffix = '.html';

function makeSuffix($str, $suffix)
{
    return $str . $suffix;
}

$new_data = array_map(function($item) use ($suffix) {
    return makeSuffix($item, $suffix);
}, $data);

需要改變元素的結構
復制代碼 代碼如下:
$arr = [
    [
        'id'=>'',
        'name'=>'',
        'create_time'=>'',
    ],
];

$new_data = array_map(function($item) {
    return ['id'=>$item['id'],'name'=>$item['name']];
}, $arr);
//如果是用foreach還需要在循環裡面建立零時變量,把需要的值賦給這個變量

執行效率
復制代碼 代碼如下:
$data = range(0, 50000)
//1
foreach ($data as &$value) {
    $value = makeSuffix($value, $suffix);
}

//2
foreach ($data as $value) {
    $new[] = makeSuffix($value, $suffix);
}

//3
array_map(function($item) use ($suffix) {
    return makeSuffix($item, $suffix);
}, $data);

經過5W次執行之後,從結果看1-3,大部分情況執行時間依次升高,其中一次執行結果時間如下
復制代碼 代碼如下:
1:0.0260009765625
2:0.038002014160156
3:0.047003030776978

結論

閉包的代碼相對優雅,但是邏輯比較容易混淆,相比其他方式執行效率相對較低,要慎用。建議在代碼結構比較亂,需要封裝的時候使用。

希望此文能幫到未曾使用或者對 PHP 的閉包有疑問的同學,同時如果有不對的地方歡迎支出。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved