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

Passing variable variable into closure throws a parse error?

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

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

解析错误是这样的:

Parse error: syntax error, unexpected '$', expecting '&' or variable (T_VARIABLE) in

我是不是做错了什么?为什么它不让我传递变量variable?

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

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

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

如果这在 "your actual case" 中不起作用,请完善代码示例或解释原因。