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 Mssql操作简单封装支持存储过程
Dec 11 PHP
PHP中如何判断AJAX提交的数据
Feb 05 PHP
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
Oct 24 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
Jun 20 PHP
Drupal7 form表单二次开发要点与实例
Mar 02 PHP
PHP实现的sqlite数据库连接类
Dec 12 PHP
PHP制作万年历
Jan 07 PHP
PHP实现自动对图片进行滚动显示的方法
Mar 12 PHP
php实现以只读方式打开文件的方法
Mar 16 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
PHP使用openssl扩展实现加解密方法示例
Feb 20 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
ninety plus是什么?ninety plus咖啡好吗?
2021/03/04 新手入门
PHP与MySQL开发中页面出现乱码的一种解决方法
2007/07/29 PHP
PHP中uploaded_files函数使用方法详解
2011/03/09 PHP
CodeIgniter基本配置详细介绍
2013/11/12 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
Redis使用Eval多个键值自增的操作实例
2016/11/04 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
laravel 事件/监听器实例代码
2019/04/12 PHP
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
Javascript实现快速排序(Quicksort)的算法详解
2015/09/06 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
angularJS Provider、factory、service详解及实例代码
2016/09/21 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
Vue.js实现图片的随意拖动方法
2018/03/08 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
JavaScript 高性能数组去重的方法
2018/09/20 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
使用p5.js临摹动态图片
2019/11/04 Javascript
Python中的面向对象编程详解(下)
2015/04/13 Python
Python简单遍历字典及删除元素的方法
2016/09/18 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
Python元组知识点总结
2019/02/18 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
2019/10/17 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
Linux文件操作命令都有哪些
2016/07/23 面试题
消防安全宣传口号
2014/06/10 职场文书