如何使用闭包返回值并将值赋给全局变量

时间:2015-05-05 01:50:01

标签: php closures

我想要实现的是使用闭包来添加数组中存在的变量并将结果分配给$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);

2 个答案:

答案 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;

当您声明匿名函数时,您仍然需要调用它,这是您没有做过的事情。

有了这一切,当您只需将感兴趣的数组传递给函数,然后将总和直接返回到调用块时,就没有必要专门尝试更改外部变量。