# WeakMap クラス

(PHP 8)

## はじめに

WeakMap は、 オブジェクトをキーとして受け入れるマップ(辞書)です。 SplObjectStorage と似ていますが、 WeakMap のキーとなるオブジェクトは、 オブジェクトのリファレンスカウントが更新されません。 つまり、WeakMap のキーとなっているオブジェクトだけが唯一の残された参照だった場合、 オブジェクトはガベージコレクションの対象となり WeakMap から削除されます。 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 — マップ内に存在する有効なエントリの数を数える
- WeakMap::getIterator — イテレータを取得する
- WeakMap::offsetExists — あるオブジェクトがマップ内に存在するかを調べる
- WeakMap::offsetGet — オブジェクトが指す値を返す
- WeakMap::offsetSet — 新しいキーと値でマップを更新する
- WeakMap::offsetUnset — マップからエントリを削除する

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