我有这个代码。
$add = (function () {
$counter = 0;
return function () use(&$counter) {return $counter += 1;};
})();
echo $add(); //1
echo $add(); //2
echo $add(); //3
预期输出:
111
原始输出:
123
函数内部$counter=0
被赋值为0,所以&$counter
应该为0。
所以当我第二次调用它时,它会看到 $counter=0
并且 &$counter 将为 0
,不是吗?
为什么会增加?
最佳答案
它不会第二次调用 $counter=0。在启动第一个函数时只调用一次。当您调用 $add() 时,您每次调用第二个函数(即在您的 return 语句中),它只使用您通过引用传递的 $counter 的修改值。如果你在 $counter = 0;
之后添加 echo $counter;
你会看到。
关于php - 无法理解函数和引用行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64372502/