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 array_slice函数的使用以及参数详解
Aug 30 PHP
基于asp+ajax和数据库驱动的二级联动菜单
May 06 PHP
PHP 强制性文件下载功能的函数代码(任意文件格式)
May 26 PHP
PHP STRING 陷阱原理说明
Jul 24 PHP
判断php数组是否为索引数组的实现方法
Jun 13 PHP
php连接与操作PostgreSQL数据库的方法
Dec 25 PHP
在html文件中也可以执行php语句的方法
Apr 09 PHP
学习PHP session的传递方式
Jun 15 PHP
php将print_r处理后的数据还原为原始数组的解决方法
Nov 02 PHP
完美解决Thinkphp3.2中插入相同数据的问题
Aug 01 PHP
PHP实现二维数组中的查找算法小结
Jun 09 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递归删除指定文件夹的方法小结
2015/04/20 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
Javascript 匿名函数及其代码模式原理
2010/03/19 Javascript
使用jquery实现select添加实现后台权限添加的效果
2011/05/28 Javascript
jquery更换文章内容与改变字体大小代码
2013/09/30 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
JavaScript中通过提示框跳转页面的方法
2016/02/14 Javascript
Nodejs之http的表单提交
2017/07/07 NodeJs
vue的事件绑定与方法详解
2017/08/16 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
2020/08/22 Javascript
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
[02:59]DOTA2完美大师赛主赛事第三日精彩集锦
2017/11/25 DOTA
python中使用正则表达式的后向搜索肯定模式(推荐)
2017/11/11 Python
pandas中去除指定字符的实例
2018/05/18 Python
python中pika模块问题的深入探究
2018/10/13 Python
Python字符串对象实现原理详解
2019/07/01 Python
对Django外键关系的描述
2019/07/26 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
Python的in,is和id函数代码实例
2020/04/18 Python
python中的插入排序的简单用法
2021/01/19 Python
美国百货齐全的精品网站,提供美式风格的产品:Overstock.com
2016/07/22 全球购物
罗马尼亚在线杂货店:Pilulka.ro
2019/09/28 全球购物
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
畜牧兽医本科生的自我评价
2014/03/03 职场文书
优秀毕业生推荐信范文
2014/03/07 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
小学生作文批改评语
2014/12/25 职场文书
2015小学师德工作总结
2015/07/21 职场文书
诚实守信主题班会
2015/08/13 职场文书
Nginx服务器如何设置url链接
2021/03/31 Servers
MySQL 自定义变量的概念及特点
2021/05/13 MySQL
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电
Linux中各个目录的作用与内容
2022/06/28 Servers