A classe WeakMap

(PHP 8)

Introdução

Um WeakMap é um mapa (ou dicionário) que aceita objetos como chaves. Entretanto, diferentemente do objeto similar SplObjectStorage, um objeto em uma chave de um WeakMap não contribui com a contagem de referência do objeto. Isto é, se em algum ponto a única referência restante a um objeto é a chave de um WeakMap, o objeto sofrerá uma coleta de lixo e será removido do WeakMap. Seu caso de uso primário é construir caches de dados derivados de um objeto que não precisam durar mais que o objeto.

WeakMap implementa ArrayAccess, Traversable (via IteratorAggregate) e Countable, por isso na maioria dos casos pode ser usada da mesma forma que um array associativo.

Resumo da classe

final class WeakMap implements ArrayAccess, Countable, IteratorAggregate {
/* Métodos */
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
}

Exemplos

Exemplo #1 Exemplo de uso de 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));

O exemplo acima produzirá:

int(1)
Unsetting...
Dead!
Done
int(0)

Índice