关于PHP的匿名函数和闭包

发布于 2022-08-24 02:37:49 字数 333 浏览 18 评论 0

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

$value = Session::get('key', 'default_value');
$value = Session::get('key', function () { return 'default_value';});

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

时光礼记 2022-08-31 02:37:49

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

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

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

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

北斗星光 2022-08-31 02:37:49

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

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

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

请止步禁区 2022-08-31 02:37:49

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

usort($array,function($itema,$itemb){
    //code..
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文