如何在回调函数中包含变量?

Rya*_*yan 3 php scope callback count array-reduce

我正在尝试获得大于的数组值n.

array_reduce()这样使用:

$arr = range(1,10);
echo array_reduce($arr, function ($a, $b) { return ($b > 5) ? ++$a : $a; });
Run Code Online (Sandbox Code Playgroud)

这打印出数组中元素的数量大于硬编码的元素5.

但是我怎么能做5变量$n呢?

我试过引入第三个这样的参数:

array_reduce($arr, function ($a, $b, $n) { return ($b > $n) ? ++$a : $a; });
//                                    ^                  ^
Run Code Online (Sandbox Code Playgroud)

乃至

array_reduce($arr, function ($a, $b, $n) { return ($b > $n) ? ++$a : $a; }, $n);
//                                    ^                  ^                   ^
Run Code Online (Sandbox Code Playgroud)

这些都不起作用.你能告诉我如何在这里包含一个变量吗?

use*_*740 12

可以在"示例#3从父作用域继承变量"下的文档中找到捕获父值的语法function .. use.

..继承的变量从父范围[要求"使用"的形式和]是一样的使用全局变量..封闭的父范围是在其中封闭件被宣布(不一定是函数,它被称为功能从).

在此协助下转换原始代码use是:

$n = 5;
array_reduce($arr, function ($a, $b) use ($n) {
    return ($b > $n) ? ++$a : $a;
});
Run Code Online (Sandbox Code Playgroud)

哪里$n是"拿来主义"从外部词汇范围.

注意:在上面的示例中,提供了值的副本,并且未绑定变量本身.请参阅有关使用引用变量(例如&$n)的文档,以便能够并在父上下文中重新分配变量.