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文本操作类
Nov 25 PHP
php 高性能书写
Dec 11 PHP
PHP 过滤页面中的BOM(实现代码)
Jun 29 PHP
php创建sprite
Feb 11 PHP
必须收藏的23个php实用代码片段
Feb 02 PHP
PHP实现的DES加密解密实例代码
Apr 06 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
Ajax+PHP实现的删除数据功能示例
Feb 12 PHP
php中的依赖注入实例详解
Aug 14 PHP
浅谈laravel框架sql中groupBy之后排序的问题
Oct 17 PHP
PHP常见的序列化与反序列化操作实例分析
Oct 28 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 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继承的一个应用
2011/09/06 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
PHP中读取照片exif信息的方法
2014/08/20 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
javascript调试说明
2010/06/07 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
jQuery替换字符串(实例代码)
2013/11/13 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
Vue结合原生js实现自定义组件自动生成示例
2017/01/21 Javascript
JS实现瀑布流布局
2017/10/21 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
2019/07/03 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
原生js实现自定义难度的扫雷游戏
2021/01/22 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
[51:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python实现新浪博客备份的方法
2016/04/27 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
Php多进程实现代码
2018/05/07 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
pymysql的简单封装代码实例
2020/01/08 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
html5新特性与用法大全
2018/09/13 HTML / CSS
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
毕业生的自我评价范文
2013/12/31 职场文书
总经理的岗位职责
2014/02/23 职场文书
2014年道德讲堂实施方案
2014/03/05 职场文书
探亲假请假条
2014/04/11 职场文书
高中学生自我评价范文
2014/09/23 职场文书
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android