我想我偶然发现了PHP中的一个错误。但是,可以肯定的是,我先问这里。
$k=0;
echo preg_replace_callback('/./', function($groups) use ($k) {
return $k++;
}, 'xxxxxx');
脚本输出: 000000
预期输出: 012345
我错过了什么吗?
答案 0 :(得分:8)
$k
通过值绑定到闭包,而不是通过引用绑定。因此,在多个闭包调用之间总是相同的。
您也可以使用&$k
通过引用传递它。请注意,这也将修改闭包之外的$k
值。
答案 1 :(得分:2)
每次找到匹配时都会调用匿名函数,$ k的状态不会被保留(因此,闭包)。
尝试通过引用传递它,或使用全局。