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

时间:2014-08-07 11:51:35

标签: php count callback scope array-reduce

我正在尝试获取大于n的数组值。

我正在使用array_reduce()

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

这打印出数组中元素的数量大于硬编码的5就好了。

但是如何将5变为$n变量?

我尝试过引入第三个这样的论点:

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

甚至

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

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

1 个答案:

答案 0 :(得分:12)

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

  

..从父作用域继承变量[需要'use'表单和] 与使用全局变量相同..闭包的父作用域是闭包的函数被宣布(不一定是从中调用的函数)。

然后在use的帮助下转换原始代码:

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

从外部词法范围“使用”$n

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