[修改传递给PHP匿名函数的变量似乎未反映在变量的原始作用域中[重复]

问题描述 投票:0回答:3

此问题已经在这里有了答案:

[我通过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闭包的理解如何有误,我的期望是什么?实际如何做我想要的?

REPL of the above code

php closures anonymous-function
3个回答
3
投票

闭包范围中的$myVar副本。更改它不会更改父作用域中的变量。]​​>

如果改为传递变量的引用,该怎么办。

$myAnonFunc = function() use (&$myVar) {
    $myVar = true;
};

这将按照您的预期。


3
投票

因为块范围的更改保留在块范围内。如果要更改其地址数据,则可以通过引用传递。


3
投票

您需要传递对$ myVar的引用

© www.soinside.com 2019 - 2024. All rights reserved.