理解匿名函数PHP

时间:2016-05-27 16:14:43

标签: php web-deployment anonymous-function

我一直在使用php学习网页开发,我对匿名功能有点困惑。特别是关于参数的传递以及它们如何在这样的函数内工作。 例如,在代码中

$array = array("really long string here, boy", "this", "middling length", "larger");
usort($array, function($a, $b) {
return strlen($a) - strlen($b);
});
print_r($array);

我真的不知道如何使用参数$a$b。我认为他们需要进行比较,以便对数组进行排序,以确定函数应该如何使用它们并将它们从中取出?
在像下一个代码中的代码

$mult = function($x)
{
 return $x * 5;
};
echo $mult(2);

我知道参数直接传递给函数并用于返回乘法的结果 在这个post

的例子中
$arr = range(0, 10);
$arr_even = array_filter($arr, function($val) { return $val % 2 == 0; });
$arr_square = array_map(function($val) { return $val * $val; }, $arr);

变量$val取自哪里?

我知道也许这并不像看起来那么复杂,但我真的很担心在这种功能上使用参数

2 个答案:

答案 0 :(得分:9)

usort($array, function($a, $b) {
    return strlen($a) - strlen($b);
});

我们来看这个例子。当您将函数传递给usort()时,PHP 内部会使用数组中的2个元素调用它,以查看哪个更大/更小。

$a$b值来自内部 usort()函数。它的代码用2个参数调用提供的函数。您的参数不需要命名为$a$b,它们可以根据您的喜好命名。

答案 1 :(得分:1)

你的问题实际上并不是关于匿名函数,而是关于传递calllables。

让我们考虑您正在考虑的第一个例子

usort($array, function($a, $b) {
return strlen($a) - strlen($b);
});

让我们通过用命名函数替换匿名函数来重构它。

function compareAB($a, $b) {
return strlen($a) - strlen($b);
}

usort($array, 'comapreAB');

如您所见,您仍然可以询问$a$b的传递方式。

嗯,答案很简单。 usort期望你提供带有2个参数的callable,并在内部调用它。

相关问题