PHP 8.6.0 Beta 1 is available for testing

Memcached::get

(PECL memcached >= 0.1.0)

Memcached::getПолучает элемент

Описание

public function Memcached::get(string $key, ? callable $cache_cb = null , int $get_flags = 0): mixed

Метод Memcached::get() возвращает элемент, который до этого сохранили под ключом key. Если метод нашёл элемент и для параметра get_flags задали флаг Memcached::GET_EXTENDED , метод также вернёт для элемента значение токена CAS. Метод Memcached::cas() описывает, как использовать CAS-токены. Callback-функции кеша со сквозным чтением устанавливают через параметр cache_cb.

Список параметров

key

Ключ элемента, который требуется получить.

cache_cb

Callback-функция кеширования со сквозным чтением или null .

get_flags

Флаги для управления результатом, который вернёт метод. Метод также вернёт CAS-токен, если установили константу Memcached::GET_EXTENDED .

Возвращаемые значения

Метод возвращает значение, которое хранится в кеше, иначе false . Если для параметра get_flags установили флаг Memcached::GET_EXTENDED , возвращается массив, который содержит значение и токен CAS вместо единственного значения. Метод Memcached::getResultCode() возвращает значение константы Memcached::RES_NOTFOUND , если ключ, который передали, не существует.

Список изменений

Версия Описание
PECL memcached 3.0.0 Удалили параметр &cas_token. Вместо параметра добавили параметр get_flags, в который передаётся значение Memcached::GET_EXTENDED , чтобы метод вернул CAS-токен.

Примеры

Пример #1 Пример использования метода Memcached::get() #1

<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
$m->set('foo', 100);
var_dump($m->get('foo'));
?>

Результат выполнения приведённого примера:

int(100)

Пример #2 Пример использования Memcached::get() #2

<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
if (!($ip = $m->get('ip_block'))) {
 if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
 $ip = array();
 $m->set('ip_block', $ip);
 } else {
 /* log error */
 /* ... */
 }
}
?>

Смотрите также

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

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

up
12
letynsoft at gmail dot com
9 years ago
As of some version of php7 (i was not able to determine which exactly).
The $cas_token is no longer valid argument. It has been removed in favor of flags argument, as it appears to be causing issues when subclassing the Memcached class.
See https://github.com/php-memcached-dev/php-memcached/pull/214 for more details.
Basically you need to 
<?php
function memcacheGet($key, $cb = null, &$cas = null) {
 $m = memcacheGetObject();
 if(empty($m))
 return false;
 if(defined('Memcached::GET_EXTENDED')) {
 //Incompatible change in php7, took me 2 hours to figure this out, grrr
 $_o = $m->get($key, $cb, Memcached::GET_EXTENDED);
 $o = $_o['value'];
 $cas = $_o['cas'];
 } else {
 $o = $m->get($key, $cb, $cas);
 }
 return $o;
}
?>
up
10
miha at hribar dot info
17 years ago
This method also returns false in case you set the value to false, so in order to have a proper fault mechanism in place you need to check the result code to be certain that a key really does not exist in memcached.
<?php
$Memcached = new Memcached();
$Memcached->addServer('localhost', 11211);
$Memcached->set('key', false);
var_dump($Memcached->get('key')); // boolean false
var_dump($Memcached->getResultCode()); // int 0 which is Memcached::RES_SUCCESS
?>

Or just make sure the values are not false :)
up
-4
denis_truffaut[A-T]hotmail[D-O-T]com
15 years ago
Note that this function can return NULL as FALSE, so don't make checks with === FALSE as with the old Memcache class, because it won't work. :O 
Use the not (!) operator and check the result code with getResultCode() as mentioned in the documentation :)
+Добавить

AltStyle によって変換されたページ (->オリジナル) /