此问题已经在这里有了答案:
[我通过use
将变量传递到匿名函数(闭合)中,并且在闭合体内,我正在修改变量值:
$myVar = false;
$myAnonFunc = function() use ($myVar) {
$myVar = true;
};
$myAnonFunc();
echo '$myVar => ' . ($myVar ? 'TRUE' : 'FALSE') . PHP_EOL;
// Expected `$myVar => TRUE` but got `$myVar => FALSE`
我期望闭包内的$myVar
绑定到父范围内的$myVar
,这样对闭包内的$myVar
变量的更改会反映在父级中。这似乎没有发生。对PHP闭包的理解如何有误,我的期望是什么?实际如何做我想要的?
闭包范围中的$myVar
是副本。更改它不会更改父作用域中的变量。]>
如果改为传递变量的引用,该怎么办。
$myAnonFunc = function() use (&$myVar) { $myVar = true; };
这将按照您的预期。
因为块范围的更改保留在块范围内。如果要更改其地址数据,则可以通过引用传递。
您需要传递对$ myVar的引用