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

Bre*_*ola 44 php anonymous-function

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

$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);
Run Code Online (Sandbox Code Playgroud)

这有可能吗?计算匿名函数之外的变量并在里面使用它?

mfo*_*nda 127

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

$callback = function($val) use ($avg) { return $val < $avg; };
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅匿名函数的手册页.

  • 只是为了添加上面的答案,父范围变量正在被COPIED而不是在回调函数中可用.如果需要操纵父参数,则应该像`$ listOfValLessThanAvg = []那样发送引用; $ callback = function($ val)use($ avg,&$ listOfValLessThanAvg){if($ val <$ avg)array_push($ listOfValLessThanAvg,$ val); };` (13认同)