我想要实现的是使用闭包来添加数组中存在的变量并将结果分配给$mul
变量,但它似乎不起作用。
我哪里出错?
$array = [1,2,3,4,5];
$mul =1;
$sum = function(){
global $mul;
foreach($array as $e){
$mul+= $e;
}
return $mul;
};
print_r($sum);
我也试过这种方法,但无济于事
$array = [1,2,3,4,5];
$mul =1;
$sum = function() use ($mul){
//global $mul;
//我认为上面的use语句不需要全局,所以我已经评论了上面的一行
foreach($array as $e){
$m+= $e;
}
$mul= $m;
return $mul;
};
print_r($sum);
答案 0 :(得分:3)
不需要global
只需在该函数上添加一个参数并传递它:
$sum = function($array, $mul){ // add the arguments needed
// ^ ^
foreach($array as $e){
$mul += $e;
}
return $mul;
};
$array = [1,2,3,4,5];
$mul = 1;
$result = $sum($array, $mul); // invoke function
echo $result;
答案 1 :(得分:1)
尝试:
$array = [1,2,3,4,5];
$mul =1;
$sum = function($arr) {
$mul = 0;
foreach($arr as $e){
$mul += $e;
}
return $mul;
};
$mul = $sum($array);
print $mul;
当您声明匿名函数时,您仍然需要调用它,这是您没有做过的事情。
有了这一切,当您只需将感兴趣的数组传递给函数,然后将总和直接返回到调用块时,就没有必要专门尝试更改外部变量。