将变量变量传递给闭包会引发解析错误?

时间:2018-12-25 17:08:23

标签: php closures variable-variables

我刚刚注意到,如果您尝试将变量变量放入闭包的use列表中,则会引发解析错误。示例代码:

foreach ($array as $key => $item) {
    $$key = $item->something;
    $this->doSomething($key, function ($param) use ($item, $$key) {
        $param->foo($$key);
    });
}

解析错误是这样的:

  

解析错误:语法错误,意外的'$',期望的'&'或变量(T_VARIABLE)in

我在这里做错什么了吗?为什么不让我传递变量变量?

如果我将变量变量的值存储在另一个变量中,则可以正常地通过use传递它,但这对于我的实际情况并不是最佳选择。

1 个答案:

答案 0 :(得分:1)

您说您不想将值保存在另一个变量中。但是,如何保存对变量的引用呢?在功能上应该与您的代码等效。

foreach ($array as $key => $item) {
    $$key = $item->something;
    $otherVar = &$$key;
    $this->doSomething($key, function ($param) use ($item, $otherVar) {
        $param->foo($otherVar);
    });
}

如果这在“您的实际情况”中不起作用,请完善代码示例或解释原因。