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

Php 如何使用闭包返回值并将值赋给全局变量,php,closures,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); 我也试过这种方法,但没有用 $arr

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

不需要该
全局
只需在该函数上添加一个参数并传递它:

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

不需要该
全局
只需在该函数上添加一个参数并传递它:

$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;
尝试:

当你声明匿名函数时,你仍然需要调用它,这是你没有做的

在所有这些情况下,当您只需将感兴趣的数组传递给函数,然后直接将总和返回给调用块时,无需专门尝试和更改外部变量。

尝试:

当你声明匿名函数时,你仍然需要调用它,这是你没有做的


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

请不要发布仅代码的答案,请解释这个问题以及您是如何解决的。@Darren非常感谢您在我发布答案后半秒钟,在我完成重新编辑之前提醒我这一点。工作做得很快。很高兴你有幽默感@pala_:),但是你会浪费别人的时间快速发布你知道你要编辑的答案。你发布的答案很差,达伦的观点很准确!当你发帖试图成为第一个回答的人(等等,想要moar rep)而疯狂编辑时,人们正在查看你的答案。我自己,达伦,可能还有OP都是3个新手。我已经取消了我的否决票,因为它不再有效。如果我没有重访的话,它会一直存在,所以老实说,最好避免这种“战术”。根据需要写下你的答案。如果别人先进来,那就这样吧。让你的生活变得更好。谢谢你们的帮助。我一大早就很生气,因为我正在准备考试。你们帮了大忙!糟糕的是,我忘了调用函数。请不要只发布代码答案,请解释问题以及您是如何解决的。@Darren非常感谢您在我发布答案后半秒钟,在我完成重新编辑之前提醒我这一点。工作做得很快。很高兴你有幽默感@pala_:),但是你会浪费别人的时间快速发布你知道你要编辑的答案。你发布的答案很差,达伦的观点很准确!当你发帖试图成为第一个回答的人(等等,想要moar rep)而疯狂编辑时,人们正在查看你的答案。我自己,达伦,可能还有OP都是3个新手。我已经取消了我的否决票,因为它不再有效。如果我没有重访的话,它会一直存在,所以老实说,最好避免这种“战术”。根据需要写下你的答案。如果别人先进来,那就这样吧。让你的生活变得更好。谢谢你们的帮助。我一大早就很生气,因为我正在准备考试。你们帮了大忙!糟糕的是,我忘记调用这个函数了。