WeakMap クラス

(PHP 8)

はじめに

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

WeakMap は ArrayAccess, Iterator, Countable を実装しています。 よって、ほとんどのケースで、 連想配列と同じやり方で操作できます。

クラス概要

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 
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, クラス, オブジェクト, public, マップ, キー, int, construct, Countable, offsetSet