PHP中的lambda有什么用?

use*_*841 56 php lambda

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

我已经看过Fibonacci的例子了,我真的不需要写Fibonacci序列,所以我仍然不确定它是否对编写webbish应用程序时遇到的各种任务有用.那么在"现实生活"中用它做什么呢?

Mat*_*att 81

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

我会将它们用于回调,例如:

例如

usort($myArray, function ($a, $b) {
    return $a < $b;
});
Run Code Online (Sandbox Code Playgroud)

在5.3之前,你必须......

function mySort ($a, $b) {
    return $a < $b;
}
usort($myArray, 'mySort');
Run Code Online (Sandbox Code Playgroud)

或者create_function ......

usort($myArray, create_function('$a, $b', 'return $a < $b;'));
Run Code Online (Sandbox Code Playgroud)

  • 对于那些熟悉jQuery的人来说,匿名函数将成为5.3+中的第二天性 (7认同)

GZi*_*ipp 11

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

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