使用在其外部计算的变量的回调函数

2022-08-30 09:09:48

基本上我想做这样的事情:

$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$avg = array_sum($arr) / count($arr);
$callback = function($val){ return $val < $avg };

return array_filter($arr, $callback);

这真的可能吗?在匿名函数外部计算变量并在内部使用它?


答案 1

可以使用关键字从父作用域继承变量。在您的示例中,您可以执行以下操作:use

$callback = function($val) use ($avg) { return $val < $avg; };

有关详细信息,请参阅有关匿名函数的手册页。

如果您运行的是 PHP 7.4 或更高版本,则可以使用箭头函数。箭头函数是定义匿名函数的另一种更简洁的方式,它会自动捕获外部变量,从而无需:use

$callback = fn($val) => $val < $avg;

鉴于箭头函数的简洁程度,您可以合理地直接在调用中编写它们:array_filter

return array_filter($arr, fn($val) => $val < $avg);

答案 2

使用全局变量,即$GLOBAL['avg']

$arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
$GLOBALS['avg'] = array_sum($arr) / count($arr);
$callback = function($val){ return $val < $GLOBALS['avg'] };

$return array_filter($arr, $callback);

推荐