如何使用闭包 return 一个值并将该值赋给一个全局变量

How to return a value using a closure and assigning the value to a global variable

我想要实现的是使用闭包添加数组中存在的变量并将结果分配给 $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 语句不需要这里的 global 所以我注释了上面的行

foreach($array as $e){
      $m+= $e;
 }
   $mul= $m;
  return $mul;
};
print_r($sum);

不需要 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;

尝试:

$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;

当你声明匿名函数时,你仍然必须调用它,这是你没有做的事情。

综上所述,无需专门尝试和更改外部变量,只需将感兴趣的数组传递给函数,然后 return 将总和直接传递给调用块.