Почему этот код прибавляет 2 вместо 1?

Рейтинг: 0Ответов: 1Опубликовано: 21.02.2015

Добрый день, делаю запись в кеш:

            $memcache = new Memcache;
        $memcache->connect('localhost',11211);
        $memcache->set('count',$memcache->get( 'count' )+ 1);
        echo $memcache->get( 'count' );

В результате он увеличивается на 2 каждый раз, а не на 1. (Increment делает то же самое.)

В чём тут дело? Спасибо.

Ответы

▲ 3Принят

Изначально значения с ключом count в хранилище нет, т.е. $memcache->get( 'count' ) возвращает false. false преобразуется в 0 (особенность динамической типизации), т.е. 0 + 1 = 1. При следующий итерации: 1 + 1 = 2, далее 2 + 1 = 3,... n + 1. Что характерно для обыкновенного инкремента со смещение (offset) в единицу:

$memcache = new \Memcache;
$memcache->connect('localhost',11211);
$memcache->set('count', 0);
for ($i = 1; $i <= 2; $i++) {
    var_dump($memcache->increment('count'));
}