我正在试图弄清楚如何在我的闭包中使用外部变量
function times2(Array $arr, Closure $callback) {
foreach ($arr as $n) {
$callback($n * 2);
}
}
$foo = array(1,2,3);
$ret = array();
times2($foo, function($n) use($ret) {
printf("should be adding %d to the array\n", $n);
array_push($ret, $n);
});
print_r($ret);
输出
should be adding 2 to the array
should be adding 4 to the array
should be adding 6 to the array
Array
(
)
我希望
should be adding 2 to the array
should be adding 4 to the array
should be adding 6 to the array
Array
(
[0] => 2,
[1] => 4,
[2] => 6
)
但我的$ret
数组是空的!
PS 我知道可以使用array_map
或array_walk
完成此操作。我只想弄清楚如何使用Closure。
答案 0 :(得分:2)
你需要引用$ret
而不是复制它。只需在匿名函数中的变量名前添加&
。
times2($foo, function($n) use(&$ret) {
printf("should be adding %d to the array\n", $n);
array_push($ret, $n);
});
答案 1 :(得分:-2)
很抱歉给出了错误的答案(这里的新内容)。我知道你已经选择了一个正确的答案,但我认为无论如何我都要纠正错误。我使用全局变量测试了下面的代码,它可以按照您的要求运行。谢谢你给我你的反馈。
function times2(Array $arr, Closure $callback) {
foreach ($arr as $n) {
$callback($n * 2);
}
}
$foo = array(1,2,3);
$ret = array();
times2($foo, function($n) use($ret) {
global $ret;
$ret[] = $n;
echo "should be adding $n to the array</ br>";
});
print_r($ret);