无法理解函数和引用行为

Ani*_*man 2 php

我有这个代码。

$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,不是吗?
为什么会递增?

Dmy*_*Huz 5

它不会第二次调用 $counter=0 。您在启动第一个函数时只调用一次。当您调用 $add() 时,您每次都会调用第二个函数(即在您的 return 语句中),该函数仅使用您通过引用传递的 $counter 的修改值。如果你在echo $counter;之后添加,$counter = 0;你会看到。