将可变变量传递给闭包会引发解析错误?
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" 中不起作用,请完善代码示例或解释原因。
我刚刚注意到,如果您尝试将变量 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" 中不起作用,请完善代码示例或解释原因。