# 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 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
}

## 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

- WeakMap::count — Conta o número de entradas ativas no mapa
- WeakMap::getIterator — Obtém um iterador externo
- WeakMap::offsetExists — Verifica se um certo objeto está no mapa
- WeakMap::offsetGet — Retorna o valor apontado por um certo objeto
- WeakMap::offsetSet — Atualiza o mapa com um novo par chave-valor
- WeakMap::offsetUnset — Remove uma entrada do mapa

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open