php 5.4中的匿名函数、lambda函数和闭包的区别


Difference b/w anonymous function, lambda function and closures in php 5.4

任何人都能解释php中的匿名函数、lambda函数和闭包吗?它们的功能是什么,有什么聪明的用途。

匿名函数、lambda函数和闭包都是一回事。它们允许您在没有指定名称的情况下定义函数。通常,您使用它来提高代码的可读性。

$first = function ($ar) { return $ar[0] ? $ar : null };
$array = [1, 2, 3];
$first($array);
=> 1

琐碎的例子,但应该给你的想法。需要注意的是,只有当功能在其他地方没有用处时,您才会这样做,而不是定义一个正常的功能。如果您想在很多地方使用它,您可能应该给函数更大的作用域(就像util类中的公共函数一样),以避免违反DRY。

闭包还允许您从父作用域继承变量。

$min = 0;
$max = 10;
$between = function ($v) use ($min, $max) { return $v >= $min and $v <= $max; };
$input = [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
$output = array_filter($input, $between);
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

array_map()array_reduce()array_filter()是使用匿名函数的一个特别强大的地方,因为它们需要一个带有一个参数的函数作为参数。

这方面的博士有更多的例子,法比安·波坦西耶的优秀博客文章也是如此。