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环境变量设置方法
Jan 15 PHP
window+nginx+php环境配置 附配置搭配说明
Dec 29 PHP
PHP5中虚函数的实现方法分享
Apr 20 PHP
无需重新编译php加入ftp扩展的解决方法
Feb 07 PHP
php实例分享之mysql数据备份
May 19 PHP
php判断两个日期之间相差多少个月份的方法
Jun 18 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
Sep 23 PHP
php连接微软MSSQL(sql server)完全攻略
Nov 27 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
Feb 23 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
Oct 16 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
Mar 18 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之sphinx
2013/05/15 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
2015/10/27 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
2016/09/11 PHP
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
学好js,这些js函数概念一定要知道【推荐】
2017/01/19 Javascript
基于vue的fullpage.js单页滚动插件
2017/03/20 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
node.js中使用Export和Import的方法
2017/09/18 Javascript
JS计算两个时间相差分钟数的方法示例
2018/01/10 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
Vue监听数据渲染DOM完以后执行某个函数详解
2018/09/11 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
javascript 原型与原型链的理解及应用实例分析
2020/02/10 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
详解python的数字类型变量与其方法
2016/11/20 Python
python select.select模块通信全过程解析
2017/09/20 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
Python读取实时数据流示例
2019/12/02 Python
Elasticsearch py客户端库安装及使用方法解析
2020/09/14 Python
python模块内置属性概念及实例
2021/02/18 Python
HTML5中的websocket实现直播功能
2018/05/21 HTML / CSS
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
GWebs公司笔试题
2012/05/04 面试题
数控专业毕业生求职信
2014/06/12 职场文书
移交协议书
2014/08/19 职场文书
党代会心得体会
2014/09/04 职场文书
党员带头倡议书
2015/04/29 职场文书