关于PHP的匿名函数和闭包

php中文网
发布: 2016-06-06 20:51:53
原创
1352人浏览过

问题title可能起的有点大,我想请教大家的具体问题是

$value = Session::get('key', 'default_value');
$value = Session::get('key', function () { return 'default_value';});
登录后复制

上面代码的意思就是根据session的key取得相应的值,
当该key相应的值不存在时,返回默认值(default_value)。

请问这两种写法有什么区别,
第一种很自然能理解,
第二种用匿名函数来返回的写法,有什么特定的使用场合吗?
请不吝赐教!
多谢!

回复内容:

问题title可能起的有点大,我想请教大家的具体问题是

$value = Session::get('key', 'default_value');
$value = Session::get('key', function () { return 'default_value';});
登录后复制

上面代码的意思就是根据session的key取得相应的值,
当该key相应的值不存在时,返回默认值(default_value)。

请问这两种写法有什么区别,
第一种很自然能理解,
第二种用匿名函数来返回的写法,有什么特定的使用场合吗?
请不吝赐教!
多谢!

问你一个问题就知道什么场合用匿名函数了:

假如默认值也是事先不知道,需要事后计算出来的呢?

当然你也可以在调用此方法之前先将默认值算好再传入第二参数,不过这样会有这么一个问题,如果key存在,并不需要默认值的情况下,之前算默认值运行的代码不是都浪费了吗?但是匿名函数不会,匿名函数的萌点在于需要调用它的时候才会运行,你只不过是事先定义好它的运行流程而已。

立即学习PHP免费学习笔记(深入)”;

DolphinPHP
DolphinPHP

一个基于ThinkPHP5.0开发的开源PHP快速开发框架,秉承极简、极速、极致的开发理念,为开发集成了基于数据-角色的权限管理机制,集成多种灵活快速构建工具,可方便快速扩展的模块、插件、钩子、数据包,统一了模块、插件、钩子、数据包之间的版本和依赖关系,进一步降低了代码和数据的沉余,以方便开发者快速构建自己的应用。

DolphinPHP 129
查看详情 DolphinPHP

另外你这个题目有点不太准确,你正文里提到的问题其实跟闭包没什么关系哦

session中保存的值可能是字符串、数组、类等各种数据类型,就算是单一数据类型,它表示的意义也存在多种可能,如一本书信息,一个用户信息,一个销量排行等,除此之外,返回一个默认值还有可能要处理一些逻辑、事务等等,在这种情况下,将处理逻辑作为参数传入方法,可以方便的解决这类问题。

class Session
{
  public static function get(String $key, Closure $func)
  {
    // 取key的value,如果为空则调用匿名函数
    return $func(); // 只专注于自己的业务(k-v),其它业务委托匿名函数处理。
  }
}
登录后复制

匿名函数是不需要定义函数名的,可以作为参数传递给其他函数, 通常用于回调函数。

对数组操作的时候可能会用到匿名函数比如

<code class="lang-php">usort($array,function($itema,$itemb){
    //code..
});
</code>
登录后复制
相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号