PHP中的闭包(匿名函数)浅析


Posted in PHP onFebruary 07, 2015

闭包也叫匿名函数 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 的闭包有疑问的同学,同时如果有不对的地方欢迎支出。

PHP 相关文章推荐
一个更简单的无限级分类菜单代码
Jan 16 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
May 04 PHP
ThinkPHP的I方法使用详解
Jun 18 PHP
php json转换成数组形式代码分享
Nov 10 PHP
PHP的Socket通信之UDP通信实例
Jul 02 PHP
PHP中的Session对象如何使用
Sep 25 PHP
PHP中子类重载父类的方法【parent::方法名】
May 06 PHP
php使用escapeshellarg时中文被过滤的解决方法
Jul 10 PHP
php简单生成一组与多组随机字符串的方法
May 09 PHP
微信第三方登录(原生)demo【必看篇】
May 26 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
Oct 30 PHP
PHP实现自动识别Restful API的返回内容类型
Feb 07 #PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
Feb 07 #PHP
迁移PHP版本到PHP7
Feb 06 #PHP
php include类文件超时问题处理
Feb 06 #PHP
PHP的cURL库简介及使用示例
Feb 06 #PHP
PHP实用函数分享之去除多余的0
Feb 06 #PHP
php定时执行任务设置详解
Feb 06 #PHP
You might like
memcache命令启动参数中文解释
2014/01/13 PHP
浅谈使用PHP开发微信支付的流程
2015/10/04 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
PHP的mysqli_ssl_set()函数讲解
2019/01/23 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
javascript的内存管理详解
2013/08/07 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
jquery数组过滤筛选方法grep()简介
2014/06/06 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
2017/02/10 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
python正则表达式re模块详细介绍
2014/05/29 Python
python中sleep函数用法实例分析
2015/04/29 Python
python合并已经存在的sheet数据到新sheet的方法
2018/12/11 Python
Python脚本利用adb进行手机控制的方法
2019/07/08 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
python模拟实现斗地主发牌
2020/01/07 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
文秘专业自荐信
2013/10/14 职场文书
自动化毕业生专业自荐书范文
2014/02/04 职场文书
教师开学感言
2014/02/14 职场文书
春秋淹城导游词
2015/02/11 职场文书
学生保证书格式
2015/02/27 职场文书
农村婚礼司仪主持词
2015/06/29 职场文书
高效笔记技巧分享:学会这些让你不再困扰
2019/09/04 职场文书
PostgreSQL常用字符串分割函数整理汇总
2022/07/07 PostgreSQL