【问题标题】:closure not performing as anticipated关闭未按预期执行
【发布时间】:2017-11-15 04:09:53
【问题描述】:

这是我的代码:

$array = ['foo' => 'bar', 'bis' => 'ter'];
$finalData=[];
$closure = function ($value, $key) use ($finalData) {
    $finalData[]=$value;
};
foreach ($array as $key => $value) {
    $closure($value, $key);
}
var_dump($finalData); // array (0)

为什么$finalData 里面有0 elements?不应该是['bar','ter']

【问题讨论】:

  • 来自comments on the anonymous functions page“在将变量“导入”到闭包的作用域时要小心——很容易错过/忘记它们实际上是被复制到闭包的作用域中,而不是刚刚发布。”。换句话说,函数内部的$finalData 将获得$finalData 在函数外部在定义函数时拥有的值的副本。
  • 不这样做,而是返回一个数组

标签: php closures


【解决方案1】:

您只需要通过引用使您的 use 变量可修改:

$closure = function ($value, $key) use (&$finalData) {
// add this-----------------------------^

Demo Link

【讨论】:

    猜你喜欢
    • 2013-05-13
    • 1970-01-01
    • 2013-08-20
    • 2017-12-15
    • 2011-02-25
    • 2012-11-23
    • 2014-10-20
    • 2015-09-17
    • 2015-07-22
    相关资源
    最近更新 更多