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 相关文章推荐
一个可查询所有表的“通用”查询分页类
Oct 09 PHP
PHP封装分页函数实现文本分页和数字分页
Oct 23 PHP
php删除指定目录的方法
Apr 03 PHP
php操作xml并将其插入数据库的实现方法
Sep 08 PHP
浅析php-fpm静态和动态执行方式的比较
Nov 09 PHP
PHP数组生成XML格式数据的封装类实例
Nov 10 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
Dec 25 PHP
ThinkPHP框架实现数据增删改
May 07 PHP
php workerman定时任务的实现代码
Dec 23 PHP
PHP PDOStatement::fetchColumn讲解
Jan 31 PHP
php获取微信openid方法总结
Oct 10 PHP
Laravel 框架控制器 Controller原理与用法实例分析
Apr 14 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
松下Panasonic RF-B65电路分析
2021/03/02 无线电
zf框架db类的分页示例分享
2014/03/14 PHP
php多重接口的实现方法
2015/06/20 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
Yii框架组件和事件行为管理详解
2016/05/20 PHP
mac系统下安装多个php并自由切换的方法详解
2017/04/21 PHP
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
利用iscroll4实现轮播图效果实例代码
2017/01/11 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
详解webpack分离css单独打包
2017/06/21 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
javascript 关于赋值、浅拷贝、深拷贝的个人理解
2019/11/01 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
使用Python通过win32 COM实现Word文档的写入与保存方法
2018/05/08 Python
python检测服务器端口代码实例
2019/08/31 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
pandas处理csv文件的方法步骤
2020/10/16 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
2020/10/19 Python
Python eval函数原理及用法解析
2020/11/14 Python
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
体育教育专业自荐信范文
2013/12/20 职场文书
前处理组长岗位职责
2014/03/01 职场文书
葬礼司仪主持词
2014/03/31 职场文书
政府信息公开实施方案
2014/05/09 职场文书
农村党支部书记司法四风问题对照检查材料
2014/09/26 职场文书
城南旧事观后感
2015/06/11 职场文书
嘉年华活动新闻稿
2015/07/17 职场文书
MySQL的存储过程和相关函数
2022/04/26 MySQL