Callback-функции для результирующего набора

Результирующие callable-объекты вызываются методами Memcached::getDelayed() и Memcached::getDelayedBykey() для каждого элемента результирующего набора. Callback-функции передаётся объект Memcached и массив с информацией об элементе. Callback-функция не должна ничего возвращать.

Пример #1 Пример сallback-функции для результирующего набора

<?php

$m
= new Memcached();
$m->addServer('localhost', 11211);
$items = array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
);
$m->setMulti($items);
$m->getDelayed(array('key1', 'key3'), true, 'result_cb');

function
result_cb($memc, $item)
{
var_dump($item);
}

?>

Вывод приведённого примера будет похож на:

array(3) {
  ["key"]=>
  string(4) "key1"
  ["value"]=>
  string(6) "value1"
  ["cas"]=>
  float(49)
}
array(3) {
  ["key"]=>
  string(4) "key3"
  ["value"]=>
  string(6) "value3"
  ["cas"]=>
  float(50)
}
Добавить

Примечания пользователей 1 note

up
3
edwarddrapkin at gmail dot com
16 years ago
I was having trouble making method calls with the result callbacks in getDelayed, so I emailed the developer.

If you want to use a non-static method as a callback, use the following format: array($obj, 'method'); for example:

<?php
class foo {
    private $M = false;
    
    public function __construct() {
        $this->M = new Memcached();
        $this->M->addServer('localhost', 11211);        
        $this->M->set('a', 'test');
    }

    public function test() {
        $this->M->getDelayed(array('a'), false, array($this, 'fun'));
    }
    
    public function fun() {
        echo "Great Success!";
    }
}

$f = new foo();
$f->test();
?>

or, alternatively:

<?php
class foo {
    public $M = false;
    
    public function __construct() {
        $this->M = new Memcached();
        $this->M->addServer('localhost', 11211);        
        $this->M->set('a', 'test');
    }
    
    public function fun() {
        echo "Great Success!";
    }
}

$f = new foo();
$f->M->getDelayed(array('a'), false, array($f, 'fun'));
?>

Works great, thanks Andrei :)
To Top