了解匿名函数 PHP
Understanding anonymous functions PHP
我一直在使用 php 学习 Web 开发,我对匿名函数有点困惑。特别是关于参数的传递以及它们如何在这样的函数中工作。
例如,在代码中
$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);
我知道参数是直接传给函数用来return乘法的结果
在这个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
取自哪里?
我知道也许这并不像看起来那么复杂,但我真的很困惑在这种函数上使用参数
usort($array, function($a, $b) {
return strlen($a) - strlen($b);
});
让我们举个例子。当您将函数传递给 usort()
时,PHP 内部 使用数组中的 2 个元素调用它以查看哪个是 bigger/smaller.
$a
和 $b
值来自 内部 usort()
函数。它的代码使用 2 个参数调用提供的函数。您的参数不需要命名为$a
和$b
,它们可以任意命名。
你的问题实际上不是关于匿名函数,而是关于传递可调用对象。
让我们以你们中的第一个例子为例
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 个参数并在内部调用它。
我一直在使用 php 学习 Web 开发,我对匿名函数有点困惑。特别是关于参数的传递以及它们如何在这样的函数中工作。 例如,在代码中
$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);
我知道参数是直接传给函数用来return乘法的结果
在这个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
取自哪里?
我知道也许这并不像看起来那么复杂,但我真的很困惑在这种函数上使用参数
usort($array, function($a, $b) {
return strlen($a) - strlen($b);
});
让我们举个例子。当您将函数传递给 usort()
时,PHP 内部 使用数组中的 2 个元素调用它以查看哪个是 bigger/smaller.
$a
和 $b
值来自 内部 usort()
函数。它的代码使用 2 个参数调用提供的函数。您的参数不需要命名为$a
和$b
,它们可以任意命名。
你的问题实际上不是关于匿名函数,而是关于传递可调用对象。
让我们以你们中的第一个例子为例
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 个参数并在内部调用它。