PHP bug(使用lambda函数)

时间:2012-02-13 20:52:02

标签: php lambda

我想我偶然发现了PHP中的一个错误。但是,可以肯定的是,我先问这里。

$k=0;
echo preg_replace_callback('/./', function($groups) use ($k) {
    return $k++;
}, 'xxxxxx');

脚本输出: 000000

预期输出: 012345

我错过了什么吗?

2 个答案:

答案 0 :(得分:8)

$k通过值绑定到闭包,而不是通过引用绑定。因此,在多个闭包调用之间总是相同的。

您也可以使用&$k通过引用传递它。请注意,这也将修改闭包之外的$k值。

答案 1 :(得分:2)

每次找到匹配时都会调用匿名函数,$ k的状态不会被保留(因此,闭包)。

尝试通过引用传递它,或使用全局。