(PHP 8)
WeakMap 是將對象作為 key 來訪問的 map(或者說字典)。然而,與其它類似 SplObjectStorage 不同,WeakMap 中的對象 key 不影響對象的引用計數(shù)。也就是說,如果在任何時候?qū)ζ湮ㄒ坏氖S嘁檬? WeakMap key,那么該對象將會被垃圾收集并從 WeakMap 移除。它的主要用法是從對象中編譯數(shù)據(jù)派生緩存,這種場景下不需要存活得比對象更久。
WeakMap 實現(xiàn)了 ArrayAccess、 Iterator、Countable, 因此大多數(shù)情況下,它能和關(guān)聯(lián)數(shù)組一樣使用。
示例 #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)