WeakMap クラス

はじめに

WeakMap は、 オブジェクトをキーとして受け入れるマップ(辞書)です。 SplObjectStorage と似ていますが、 WeakMap のキーとなるオブジェクトは、 オブジェクトのリファレンスカウントが更新されません。 つまり、WeakMap のキーとなっているオブジェクトだけが唯一の残された参照だった場合、 オブジェクトはガベージコレクションの対象となり WeakMap から削除されます。 WeakMap の用途は、 長く生き残る必要がないオブジェクトから派生した、 データのキャッシュを作ることです。

WeakMapArrayAccess, Traversable (IteratorAggregate 経由), Countable を実装しています。 よって、ほとんどのケースで、 連想配列と同じやり方で操作できます。

クラス概要

final WeakMap
implements ArrayAccess Countable IteratorAggregate
/* メソッド */
public int count()
public Iterator getIterator()
public bool offsetExists(object $object)
public mixed offsetGet(object $object)
public void offsetSet(object $object, mixed $value)
public void offsetUnset(object $object)

例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)

目次