PHP ошибка (лямбда-функция с использованием) - PullRequest
0 голосов
/ 14 февраля 2012

Я думаю, что наткнулся на ошибку в PHP. Однако, чтобы быть уверенным, я сначала спрашиваю здесь.

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

Вывод сценария: 000000

Ожидаемый результат: 012345

Я что-то упустил?

Ответы [ 2 ]

8 голосов
/ 14 февраля 2012

$k привязано к закрытию по значению, а не по ссылке.Таким образом, он всегда будет одинаковым между несколькими вызовами закрытия.

Вы также можете передать его по ссылке, используя &$k.Обратите внимание, что это также изменит значение $k вне замыкания.

2 голосов
/ 14 февраля 2012

Анонимная функция вызывается каждый раз, когда найдено совпадение, состояние $ k не сохраняется во время (следовательно, закрытие).

Попробуйте передать его по ссылке или используйте глобальное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...