lambda 在 PHP 中有什么用?
lambda 匿名函数是 PHP 5.3 的一部分。它有什么用?有什么事情只能用lambda做吗?lambda 是否更适合某些任务?
我已经看过斐波那契的例子,我真的不需要写斐波那契序列,所以我仍然不确定它是否对我在编写Webbish应用程序时遇到的各种任务有用。那么,在“现实生活”中,人们如何处理它呢?
lambda 匿名函数是 PHP 5.3 的一部分。它有什么用?有什么事情只能用lambda做吗?lambda 是否更适合某些任务?
我已经看过斐波那契的例子,我真的不需要写斐波那契序列,所以我仍然不确定它是否对我在编写Webbish应用程序时遇到的各种任务有用。那么,在“现实生活”中,人们如何处理它呢?
任何需要临时功能的东西,你可能只会使用一次。
我会将它们用于回调,用于以下函数:
例如:
usort($myArray, function ($a, $b) {
return $a < $b;
});
在5.3之前,你必须..
function mySort ($a, $b) {
return $a < $b;
}
usort($myArray, 'mySort');
或者create_function...
usort($myArray, create_function('$a, $b', 'return $a < $b;'));
匿名函数(闭包)可以创建为局部函数(因此不会像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);
(当然,此示例在没有闭包的情况下可能更简单,但它仅用于演示。