# WeakMap 类

(PHP 8)

## 简介

WeakMap 是将对象作为 key 来访问的 map（或者说字典）。然而，与其它类似 SplObjectStorage 不同，WeakMap 中的对象 key 不影响对象的引用计数。也就是说，如果在任何时候对其唯一的剩余引用是 WeakMap key，那么该对象将会被垃圾收集并从 WeakMap 移除。它的主要用法是从对象中编译数据派生缓存，这种场景下不需要存活得比对象更久。

WeakMap 实现了 ArrayAccess、 Traversable（通过 IteratorAggregate）和 Countable， 因此大多数情况下，它能和关联数组一样使用。

## 类摘要

final class WeakMap implements ArrayAccess, Countable, IteratorAggregate {
/* 方法 */
public function count(): int
public function getIterator(): Iterator
public function offsetExists(object `$object`): bool
public function offsetGet(object `$object`): mixed
public function offsetSet(object `$object`, mixed `$value`): void
public function 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 中移除一条

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open