はじめに
PHP Manual
PHP Manual»定義済みのインターフェイスとクラス»WeakMap

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)

目次

To Top