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 相关文章推荐
PHP新手上路(五)
Oct 09 PHP
php入门学习知识点四 PHP正则表达式基本应用
Jul 14 PHP
php中time()和mktime()方法的区别
Sep 28 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
Jun 19 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
Oct 15 PHP
php实现递归的三种基本方式
Jul 04 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
Mar 19 PHP
浅谈php中urlencode与rawurlencode的区别
Sep 05 PHP
[原创]php正则删除html代码中class样式属性的方法
May 24 PHP
laravel如何开启跨域功能示例详解
Aug 31 PHP
PHP学习记录之数组函数
Jun 01 PHP
Laravel框架下的Contracts契约详解
Mar 17 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 获取本地IP代码
2013/06/23 PHP
PHP实现变色验证码实例
2014/01/06 PHP
PHP5.5在windows安装使用memcached服务端的方法
2014/04/16 PHP
CI框架AR数据库操作常用函数总结
2016/11/21 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
php 多个变量指向同一个引用($b = &$a)用法分析
2019/11/13 PHP
Javascript的并行运算实现代码
2010/11/19 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
2013/10/01 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
2016/08/10 Javascript
php输出全部gb2312编码内的汉字方法
2017/03/04 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
vue router+vuex实现首页登录验证判断逻辑
2018/05/17 Javascript
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
python微信跳一跳系列之棋子定位像素遍历
2018/02/26 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
python Pexpect模块的使用
2020/12/25 Python
CSS3教程(9):设置RGB颜色
2009/04/02 HTML / CSS
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
.NET面试题:什么是反射
2016/09/30 面试题
linux面试题参考答案(6)
2014/08/29 面试题
医学专业职业生涯规划范文
2014/02/05 职场文书
大学生标准自荐书
2014/06/15 职场文书
入党个人总结范文
2015/03/02 职场文书
2015年幼儿园安全工作总结
2015/05/12 职场文书
英语投诉信范文
2015/07/03 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python
python如何正确使用yield
2021/05/21 Python
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS