我有这个代码。
$add = (function () {
$counter = 0;
return function () use(&$counter) {return $counter += 1;};
})();
echo $add(); //1
echo $add(); //2
echo $add(); //3
Run Code Online (Sandbox Code Playgroud)
预期输出:
111
Run Code Online (Sandbox Code Playgroud)
原始输出:
123
Run Code Online (Sandbox Code Playgroud)
函数内部$counter=0由 0 赋值,所以&$counter应该是 0。
所以当我第二次调用它时,它看到$counter=0了&$counter will be 0,不是吗?
为什么会递增?
它不会第二次调用 $counter=0 。您在启动第一个函数时只调用一次。当您调用 $add() 时,您每次都会调用第二个函数(即在您的 return 语句中),该函数仅使用您通过引用传递的 $counter 的修改值。如果你在echo $counter;之后添加,$counter = 0;你会看到。