La clase WeakMap

(PHP 8)

Introducción

Un WeakMap es un array asociativo (o diccionario) que acepta objetos como claves. Sin embargo, a diferencia del similar SplObjectStorage, un objeto en una clave de WeakMap no contribuye al número de referencias del objeto. En otras palabras, si, en un momento dado, la única referencia restante a un objeto es la clave de un WeakMap, el objeto será recolectado y eliminado del WeakMap. Su principal caso de uso es la construcción de cachés de datos derivados de un objeto que no necesitan ser conservados más tiempo que el objeto.

WeakMap implementa ArrayAccess, Traversable (vía IteratorAggregate), y Countable, de modo que, en la mayoría de los casos, puede ser utilizado de la misma manera que un array asociativo.

Sinopsis de la Clase

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
}

Ejemplos

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

El resultado del ejemplo sería:

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

Tabla de contenidos