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 相关文章推荐
怎么使 Mysql 数据同步
Oct 09 PHP
用libtemplate实现静态网页生成
Oct 09 PHP
微信支付开发教程(一)微信支付URL配置
May 28 PHP
如何让CI框架支持service层
Oct 29 PHP
php隐藏IP地址后两位显示为星号的方法
Nov 21 PHP
php中通过DirectoryIterator删除整个目录的方法
Mar 13 PHP
php将字符串全部转换成大写或者小写的方法
Mar 17 PHP
php 无限级分类 获取顶级分类ID
Mar 13 PHP
php简单获取复选框值的方法
May 11 PHP
Yii2框架实现注册和登录教程
Sep 30 PHP
php封装的pdo数据库操作工具类与用法示例
May 08 PHP
PHP实现的抓取小说网站内容功能示例
Jun 27 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
php对图像的各种处理函数代码小结
2013/07/08 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
php PDO异常处理详解
2016/11/20 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
JS event使用方法详解
2008/04/28 Javascript
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
关于js中alert弹出窗口文本换行问题简单详细说明
2012/12/11 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
中止javascript执行的方法
2014/02/14 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
JavaScript实现获得所有兄弟节点的方法
2015/07/23 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
js实现手机发送验证码功能
2017/03/13 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
javaScript中"=="和"==="的区别详解
2018/03/16 Javascript
详解@angular/cli 改变默认启动端口两种方式
2018/11/29 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
django模板语法学习之include示例详解
2017/12/17 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
2018/12/26 Python
python 创建一维的0向量实例
2019/12/02 Python
python实现图像全景拼接
2020/03/27 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
道德模范先进事迹
2014/02/14 职场文书
学生周末长期请假条
2014/02/15 职场文书
党员公开承诺书内容
2014/05/20 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
领导班子专题民主生活会情况想汇报
2014/09/30 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书