lambda在PHP中有什么用途?

lambda在PHP中有什么用途?,php,lambda,Php,Lambda,lambda匿名函数是PHP5.3的一部分。它有什么用?有什么事只能用兰姆达来做吗?lambda是否更适合某些任务 我看过斐波那契的例子,我真的不需要写斐波那契序列,所以我仍然不确定它对于我在编写网络应用程序时遇到的各种任务是否有用。那么,在“现实生活”中,人们用它做什么呢?任何需要临时功能的东西,你可能只会使用一次 我会将它们用于回调,用于以下函数: 例如 usort($myArray,function($a,$b){ 返回$a获得它的来源:)很好的问题和很好的答案。我想我大概知道什么

lambda匿名函数是PHP5.3的一部分。它有什么用?有什么事只能用兰姆达来做吗?lambda是否更适合某些任务


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

任何需要临时功能的东西,你可能只会使用一次

我会将它们用于回调,用于以下函数:

例如

usort($myArray,function($a,$b){
返回$a<$b;
});
在5.3之前,你必须

function mySort ($a, $b) {
    return $a < $b;
}
usort($myArray, 'mySort');
函数mySort($a,$b){
返回$a<$b;
}
usort($myArray,'mySort');
或创建_函数

usort($myArray, create_function('$a, $b', 'return $a < $b;'));
usort($myArray,create_函数('$a,$b','return$a<$b;');

lambdas使一些用例更加方便。例如,如果一个方法使用回调函数,那么对该回调函数使用lambda意味着您不必在某个地方定义“实”函数来处理它。所以,lambdas让你的代码更干净


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

神秘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);
    });
  });
}
引用来源:

匿名函数(闭包)可以创建为本地函数(因此不会像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);

(当然,这个例子没有闭包可能会更简单,但它只是为了演示。)

尽管人们可以想到lambda函数的所有用途,但在PHP中它还允许一些非常特殊的东西,称为闭包。这是在当前作用域停止存在很久之后,使当前作用域中的变量可供函数使用的能力

只要提到闭包允许您使用的一些有用模式,您就可以实现和使用它们

@Matt在回答中强调的一次性或回调函数也非常有用


有关闭包的更多信息,请查看以下问题:

谢谢,Matt!你能举个例子吗?为什么它比另一个更好(除非是显而易见的)?:)同意。很多数组处理函数都使用回调函数,如果能够使用匿名函数,我会更高兴。好的,我想我已经开始理解了。如果要多次使用它,您可能需要创建一个函数,因为该函数只能被解析一次。但是,如果您只打算使用一次函数,请使用lambda,因为它的开销比函数小?对于那些熟悉jQuery的人来说,匿名函数将成为5.3+中的第二天性。虽然我觉得这里缺少了闭包。好吧,这很酷,但它似乎正是我永远不会使用的教科书Comp-Sci示例;)不管怎样,你用它干什么?哦,我没有用它,我引用了我从>>获得它的来源:)很好的问题和很好的答案。我想我大概知道什么是lambda函数,以及它们如何在PHP中使用(因为我一直在jQuery中使用它们),但我从来没有想过。。。有点积极地忽略它,直到有人随机询问它。我懒得验证我的假设,但意外地发现答案对我来说是完美的。再一次。。。谢谢。:)好的,除了所有的宣传(“Lambda the Ultimate”)和可以用Lambda函数构建一个完整的语言这一事实之外,就PHP而言,它的用途是一个一次性的、一次性的函数。这就是我得到的信息。“保持你的代码更干净”这有点主观tbh。我更喜欢命名函数。与“getUsernameFromUserObject()”相比,阅读带有“use”和“params”以及“not”的Lambda代码并“计算”它的功能。meh to anon funcs:P
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);