资讯专栏INFORMATION COLUMN

浅析 PHP 闭包

focusj / 2012人阅读

摘要:闭包也叫匿名函数引入。建议在代码结构比较乱,需要封装的时候使用。希望此文能帮到未曾使用或者对的闭包有疑问的同学,同时如果有不对的地方欢迎支出。

闭包也叫匿名函数 PHP5.3 引入。

使用方法

需要调整数组元素中的值

php$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);

需要改变元素的结构

php$arr = [
    [
        "id"=>"",
        "name"=>"",
        "create_time"=>"",
    ],
];

$new_data = array_map(function($item) {
    return ["id"=>$item["id"],"name"=>$item["name"]];
}, $arr);
//如果是用foreach还需要在循环里面建立零时变量,把需要的值赋给这个变量

执行效率
php$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 的闭包有疑问的同学,同时如果有不对的地方欢迎支出。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20942.html

相关文章

  • PHP容器--Pimple运行流程浅析

    摘要:实际上,闭包和匿名函数是伪装成函数的对象。容器流程浅析是社区中比较流行的容器。服务提供者服务提供者是连接容器与具体功能实现类的桥梁。服务提供者需要实现接口所有服务提供者必须实现接口方法。但已经完成了服务提供者的注册工作。 需要具备的知识点 闭包 闭包和匿名函数在PHP5.3.0中引入的。 闭包是指:创建时封装周围状态的函数。即使闭包所处的环境不存在了,闭包中封装的状态依然存在。 理论上...

    RobinTang 评论0 收藏0
  • 浅析如何通过PHP类的反射来实现依赖注入

    摘要:也正式因为类的反射很多框架才能实现依赖注入自动解决类与类之间的依赖关系,这给我们平时的开发带来了很大的方便。为了更好地理解,我们通过一个例子来看类的反射,以及如何实现依赖注入。反射出方法的参数其返回值为对象构成的数组。 PHP具有完整的反射 API,提供了对类、接口、函数、方法和扩展进行逆向工程的能力。通过类的反射提供的能力我们能够知道类是如何被定义的,它有什么属性、什么方法、方法都有...

    WilsonLiu95 评论0 收藏0
  • 浅析js闭包

    摘要:在中,变量只有两种,全局变量和局部变量。这里要注意的是定义局部变量必须加上,否则定义了全局变量。上面也可以这样实现那么闭包的特点是什么呢首先是之前一直在强调的可以访问一个函数的局部变量。 **什么是闭包?** 闭包是指所有能够读取其他函数内部变量的函数。在JavaScript中,变量只有两种,全局变量和局部变量。区别在于任何函数都可以直接对全局变量进行访问,而局部变量则只有当前函数以及...

    cnio 评论0 收藏0
  • 浅析Vue响应式原理(三)

    摘要:响应式原理之不论如何,最终响应式数据都要通过来实现,实际要借助新增的。在函数内,首先实例化一个实例,会在稍后添加为响应式数据自定义的中发挥作用。只有数组和对象才可能是响应式,才能返回实例。参考链接技术内幕揭开数据响应系统的面纱源码 Vue响应式原理之defineReactive defineReactive 不论如何,最终响应式数据都要通过defineReactive来实现,实际要借助...

    tomener 评论0 收藏0
  • koa2 总体流程原理浅析(二) 之 中间件原理

    摘要:任何一层报错,都能用捕获总结是一个非常轻量级的框架,只实现了中间件处理流程和对对象的封装。其他的功能都由外部中间件提供。 koa 的中间件机制巧妙的运用了闭包和 async await 的特点,形成了一个洋葱式的流程,和 JS 的事件流 (捕获 -> target -> 冒泡) 相似 handleRequest(ctx, fnMiddleware) { const res ...

    zhoutk 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<