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

finalclassWeakMapimplementsArrayAccess, Countable, IteratorAggregate {
publiccount(): int
publicoffsetExists(object$object): bool
publicoffsetGet(object$object): mixed
publicoffsetSet(object$object, mixed$value): void
publicoffsetUnset(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

To Top