PHP中的闭包(匿名函数)浅析

yipeiwu_com6年前PHP代码库

闭包也叫匿名函数 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反射机制的用法,分享给大家供大家参考之用。具体方法如下: 演示示例代码如下所示: <?php class ClassOne { function...

PHP依赖注入容器知识点浅析

依赖注入容器理解 耦合 一个好的代码结构设计一定是松耦合的,这也是很多通用设计模式的宗旨,就是把分散在各处的同一个功能的代码汇聚到一起,形成一个模块,然后在不同模块之间通过一些细小的、明...

PHP操作Postgresql封装类与应用完整实例

本文实例讲述了PHP操作Postgresql封装类与应用。分享给大家供大家参考,具体如下: 这个类封装了一些常用的函数,原帖里面还有事务处理的内容,以后再学习吧。 类文件定义: &l...

php获取字符串中各个字符出现次数的方法

本文实例讲述了php获取字符串中各个字符出现次数的方法。分享给大家供大家参考。具体实现方法如下: <?php //获取字符串是哪一个字符出现的字数最多 $str = "...

php strlen mb_strlen计算中英文混排字符串长度

比较strlen和mb_strlen 当字符全是英文字符的时候,两者是一样。这里主要比较一下,中英文混排的时候,两个计算结果。(测试时编码方式是UTF8) 复制代码 代码如下:<?...