WeakMap 類

(PHP 8)

簡(jiǎn)介

WeakMap 是將對(duì)象作為 key 來(lái)訪問(wèn)的 map(或者說(shuō)字典)。然而,與其它類似 SplObjectStorage 不同,WeakMap 中的對(duì)象 key 不影響對(duì)象的引用計(jì)數(shù)。也就是說(shuō),如果在任何時(shí)候?qū)ζ湮ㄒ坏氖S嘁檬? WeakMap key,那么該對(duì)象將會(huì)被垃圾收集并從 WeakMap 移除。它的主要用法是從對(duì)象中編譯數(shù)據(jù)派生緩存,這種場(chǎng)景下不需要存活得比對(duì)象更久。

WeakMap 實(shí)現(xiàn)了 ArrayAccess、 Iterator、Countable, 因此大多數(shù)情況下,它能和關(guān)聯(lián)數(shù)組一樣使用。

類摘要

final class WeakMap implements ArrayAccess, Countable, IteratorAggregate {
/* 方法 */
public __construct()
public count(): int
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 
{
    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));

以上例程會(huì)輸出:

int(1)
Unsetting...
Dead!
Done
int(0)

目錄