2024 年 PHP Conference Japan

wincache_ucache_set

(PECL wincache >= 1.1.0)

wincache_ucache_set 在使用者快取中新增變數,如果快取中已存在該變數,則覆寫它

說明

wincache_ucache_set(混合類型 $key, 混合類型 $value, 整數 $ttl = 0): 布林值
wincache_ucache_set(陣列 $values, 混合類型 $unused = NULL, 整數 $ttl = 0): 布林值

在使用者快取中新增一個變數。如果快取中已存在該變數,則會覆寫該變數。新增或更新的變數會保留在使用者快取中,直到其存活時間到期,或使用 wincache_ucache_delete()wincache_ucache_clear() 函式將其刪除。

參數

key

使用此 key 名稱儲存變數。如果已存在具有相同 key 的變數,則該函式會使用新值覆寫先前的值。key 區分大小寫。key 也可以接受名稱 => 值對的陣列,其中名稱將被用作鍵。這可以用於在一次操作中向快取添加多個值,從而避免競爭條件。

value

要儲存的變數值。value 支援所有資料類型,資源類型除外,例如檔案控制代碼。如果第一個參數是陣列,則會忽略此參數。一般的做法是在使用陣列作為 key 時,將 null 作為 value 傳遞。如果 value 是一個物件,或是一個包含物件的陣列,則物件將會被序列化。有關序列化物件的詳細資訊,請參閱 __sleep()

values

鍵和值的關聯陣列。

ttl

變數在快取中的存活時間(以秒為單位)。在 ttl 中指定的值過後,儲存的變數將從快取中刪除。此參數的預設值為 0,這表示變數將保留在快取中,除非使用 wincache_ucache_delete()wincache_ucache_clear() 函式明確刪除。

回傳值

如果 key 是字串,則函式在成功時返回 true,在失敗時返回 false

如果 key 是一個陣列,則函式返回

  • 如果陣列中所有的名稱 => 值對都可以設定,函式返回一個空陣列;
  • 如果陣列中所有的名稱 => 值對都無法設定,函式返回 false
  • 如果有些可以設定而有些不能,函式返回一個陣列,其中包含在使用者快取中新增失敗的名稱=>值對。

範例

範例 #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 使用陣列作為 keywincache_ucache_set()

<?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"

參見:

新增筆記

使用者貢獻的筆記 1 則筆記

don dot raman at microsoft dot com
14 年前
在撰寫此筆記時 (PHP 5.3.1) 不允許序列化閉包。

這表示像以下這樣的程式碼

<?php
//閉包
$bar3 = function($a) {
return
$a * 2;
};
wincache_ucache_set('foo3', $bar3);
var_dump(wincache_ucache_get('foo3'));
echo
"<br>";
?>

會拋出例外
[11-Feb-2010 09:25:33] PHP Fatal error: 未捕捉的例外 'Exception',訊息為 'Serialization of 'Closure' is not allowed' 位於 C:\inetpub\wwwroot\phptest\tests\ucache\wincache15.php:6
堆疊追蹤
#0 C:\inetpub\wwwroot\phptest\tests\ucache\wincache15.php(6): wincache_ucache_set('foo3', Object(Closure))
#1 {main}
拋出於 C:\inetpub\wwwroot\phptest\tests\ucache\wincache15.php 的第 6 行

然而,可以像這樣捕捉這個例外
<?php
//閉包
$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>";
?>

這將產生如下所示的輸出
string(41) "Serialization of 'Closure' is not allowed" NULL
To Top