wincache_ucache_set
(PECL wincache >= 1.1.0)
wincache_ucache_set — 変数をユーザーキャッシュに追加し、変数が既にキャッシュに存在する場合はそれを上書きする
説明
変数をユーザーキャッシュに追加します。変数が既にキャッシュに存在する場合はそれを上書きします。 追加あるいは更新された変数は、有効期限に達するか、 wincache_ucache_delete() あるいは wincache_ucache_clear() で削除されるまではキャッシュに残り続けます。
パラメータ
key
-
変数を格納するときに、この名前のキーを使います。 同じキーで既に変数が格納されているときは、元の値を新しい値で上書きします。
key
には name => value のペアの配列を渡すこともできます。 この場合は name がキーとなります。 この形式を使えば複数の値を一度の操作でキャッシュに格納できるので、競合状態になることを防げます。 value
-
格納したい変数の値。ファイルハンドルのようなリソース型以外のすべてのデータ型をサポートしています。 最初のパラメータが配列の場合は、このパラメータは無視されます。 一般的な指針として、
key
に配列を渡す場合はvalue
をnull
にしておきましょう。value
がオブジェクト、あるいはオブジェクトを含む配列である場合は、 オブジェクトがシリアライズされます。オブジェクトのシリアライズについての詳細は __sleep() を参照ください。 values
-
キーと値の連想配列。
ttl
-
変数のキャッシュ内での生存時間を秒単位で指定します。
ttl
で指定した秒数が経過すると、 格納されている変数はキャッシュから削除されます。 このパラメータのデフォルト値は0
で、これは wincache_ucache_delete() あるいは wincache_ucache_clear() で明示的に削除するまでキャッシュに残り続けることを意味します。
戻り値
key
が文字列のときは、成功した場合に true
、失敗した場合に false
を返します。
key
が配列のときの戻り値は、次のようになります。
- 配列内のすべての name => value ペアが設定できた場合は、空の配列を返します。
-
配列内の name => value ペアがひとつも設定できなかった場合は、
false
を返します。 - 成功したペアと失敗したペアがある場合は、ユーザーキャッシュへの追加に失敗した name=>value ペアを含む配列を返します。
例
例1 wincache_ucache_set() で key
を文字列にする例
<?php
$bar = 'BAR';
var_dump(wincache_ucache_set('foo', $bar));
var_dump(wincache_ucache_get('foo'));
$bar1 = 'BAR1';
var_dump(wincache_ucache_set('foo', $bar1));
var_dump(wincache_ucache_get('foo'));
?>
上の例の出力は以下となります。
bool(true) string(3) "BAR" bool(true) string(3) "BAR1"
例2 wincache_ucache_set() で key
を配列にする例
<?php
$colors_array = array('green' => '5', 'Blue' => '6', 'yellow' => '7', 'cyan' => '8');
var_dump(wincache_ucache_set($colors_array));
var_dump(wincache_ucache_set($colors_array));
var_dump(wincache_ucache_get('Blue'));
?>
上の例の出力は以下となります。
array(0) {} array(0) {} string(1) "6"
参考
- wincache_ucache_add() - 変数が既にキャッシュに存在しない場合にのみ変数をユーザーキャッシュに追加する
- wincache_ucache_get() - ユーザーキャッシュに格納された変数を取得する
- wincache_ucache_delete() - 変数をユーザーキャッシュから削除する
- wincache_ucache_clear() - ユーザーキャッシュの中身全体を削除する
- wincache_ucache_exists() - 変数がユーザーキャッシュに存在するかどうかを調べる
- wincache_ucache_meminfo() - ユーザーキャッシュのメモリ使用状況についての情報を取得する
- wincache_ucache_info() - ユーザーキャッシュにキャッシュされたファイルについての情報を取得する
- __sleep()
User Contributed Notes 1 note
As of writing this note (PHP 5.3.1) serialization of closure is not allowed.
This means a code like the one below:
<?php
//Closure
$bar3 = function($a) {
return $a * 2;
};
wincache_ucache_set('foo3', $bar3);
var_dump(wincache_ucache_get('foo3'));
echo "<br>";
?>
Will throw exception:
[11-Feb-2010 09:25:33] PHP Fatal error: Uncaught exception 'Exception' with message 'Serialization of 'Closure' is not allowed' in C:\inetpub\wwwroot\phptest\tests\ucache\wincache15.php:6
Stack trace:
#0 C:\inetpub\wwwroot\phptest\tests\ucache\wincache15.php(6): wincache_ucache_set('foo3', Object(Closure))
#1 {main}
thrown in C:\inetpub\wwwroot\phptest\tests\ucache\wincache15.php on line 6
However one catch this exception like:
<?php
//Closure
$bar3 = function($a) {
return $a * 2;
};
try
{
wincache_ucache_set('foo3', $bar3);
}
catch (Exception $e)
{
var_dump($e->getMessage());
}
var_dump(wincache_ucache_get('foo3'));
echo "<br>";
?>
This will generate output as shown beloe:
string(41) "Serialization of 'Closure' is not allowed" NULL