PHP8 WeakMap 類
2023-08-21 17:26 更新
(PHP 8)
簡介
WeakMap 是將對象作為 key 來訪問的 map(或者說字典)。然而,與其它類似 SplObjectStorage 不同,WeakMap 中的對象 key 不影響對象的引用計數。也就是說,如果在任何時候對其唯一的剩余引用是 WeakMap key,那么該對象將會被垃圾收集并從 WeakMap 移除。它的主要用法是從對象中編譯數據派生緩存,這種場景下不需要存活得比對象更久。
WeakMap 實現了 ArrayAccess、 Iterator、Countable, 因此大多數情況下,它能和關聯數組一樣使用。
類摘要
final class WeakMap implements ArrayAccess, Countable, IteratorAggregate {
/* 方法 */
public count(): int
public getIterator(): Iterator
public offsetExists(object $object): bool
public offsetGet(object $object): mixed
public offsetSet(object $object, mixed $value): void
public offsetUnset(object $object): void
}
示例
示例 #1 Weakmap 用法示例
<?php
$wm = new WeakMap();
$o = new stdClass;
class A {
public function __destruct() {
echo "Dead!\n";
}
}
$wm[$o] = new A;
var_dump(count($wm));
echo "Unsetting...\n";
unset($o);
echo "Done\n";
var_dump(count($wm));
以上示例會輸出:
int(1)
Unsetting...
Dead!
Done
int(0)
目錄
- WeakMap::count — 統計 map 中存活實體的數量
- WeakMap::getIterator — 接收一個外部迭代器
- WeakMap::offsetExists — 檢測 map 中是否存在某個對象
- WeakMap::offsetGet — 返回某個對象指向的值
- WeakMap::offsetSet — 更新 map 新的鍵值對
- WeakMap::offsetUnset — 從 map 中移除一條
以上內容是否對您有幫助:
更多建議: