首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP中lambda有什么用?

在PHP中lambda有什么用?
EN

Stack Overflow用户
提问于 2009-12-16 01:21:10
回答 3查看 39.7K关注 0票数 66

lambda匿名函数是PHP 5.3的一部分。它有什么用呢?有没有什么事情只能用lambda来做呢?对于某些任务,lambda更好吗?

我已经看过Fibonacci示例,并且我真的不需要编写Fibonacci序列,所以我仍然不确定它对于我在编写webbish应用程序时遇到的各种任务是否有用。那么,在“现实生活”中,人们用它做什么呢?

EN

回答 3

Stack Overflow用户

发布于 2009-12-16 02:05:39

匿名函数(闭包)可以创建为局部函数(因此不会像Dathan建议的那样轮询全局空间)。

通过"use“关键字,传递给封闭函数或由封闭函数创建的变量可以在闭包中使用。这在受参数列表限制的回调函数中非常有用。"use“变量可以在闭包外部定义,这样就不需要在每次调用闭包时重新定义它们。

function change_array($arr, $pdo)
{
    $keys = array('a', 'c');
    $anon_func = function(& $val, $key) use ($keys, $pdo)
    {
         if (in_array($key, $keys) {
            $pdo->query('some query using $key');
            $val = $pdo->fetch();
        }
    }
    arr_walk($arr, $anon_func);
    return $arr;
}

$pdo = new($dsn, $uname, $pword);
$sample = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4);
$sample = change_array($sample, $pdo);

(当然,这个示例可以在没有闭包的情况下更简单,但它仅用于演示。)

票数 11
EN

Stack Overflow用户

发布于 2009-12-16 01:29:32

有一些用例通过lambdas变得更加方便。例如,如果一个方法使用回调,那么使用lambda作为回调就意味着你不必在某个地方定义一个“真正的”函数来处理它。所以,lambda让你的代码更整洁。

如上所述,lambdas可以用作“短期”函数。例如,排序算法通常只需要知道对于ab的任何组合,变量a是否小于变量b。要创建能够处理任何对象类的通用排序算法,您可以将排序函数定义为接受用作比较器的函数。提供一个lambda作为比较器函数意味着您可以在每次调用的基础上定义您的排序行为,而不是必须定义一个“真正的”函数,该函数将在您的脚本的生命周期内一直存在,以处理这种排序情况。

票数 4
EN

Stack Overflow用户

发布于 2009-12-16 01:31:26

神秘的Y组合器的实现?

function Y($F)
{
  $func = function ($f) { return $f($f); };

  return $func(function ($f) use($F)
  {
    return $F(function ($x) use($f)
    {
      $ff = $f($f);

      return $ff($x);
    });
  });
}

引用来源:http://fabien.potencier.org/article/17/on-php-5-3-lambda-functions-and-closures

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1909002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档