La classe WeakMap

(PHP 8)

Introduction

Un WeakMap est un tableau associatif (ou dictionnaire) qui accepte des objets comme clés. Cependant, contrairement au autrement similaire SplObjectStorage, un objet dans une clé de WeakMap ne contribue pas au nombre de références de l'objet. En d'autres termes, si, à un moment donné, la seule référence restante à un objet est la clé d'un WeakMap, l'objet sera ramassé et supprimé du WeakMap. Son principal cas d'utilisation est la construction de caches de données dérivées d'un objet qui n'ont pas besoin d'être conservées plus longtemps que l'objet.

WeakMap implemente ArrayAccess, Traversable (via IteratorAggregate), et Countable, de sorte que, dans la plupart des cas, il peut être utilisé de la même manière qu'un tableau associatif.

Synopsis de la classe

finalclassWeakMapimplementsArrayAccess, Countable, IteratorAggregate {
publiccount(): int
publicoffsetExists(object$object): bool
publicoffsetGet(object$object): mixed
publicoffsetSet(object$object, mixed$value): void
publicoffsetUnset(object$object): void
}

Exemples

Exemple #1 Exemple d'utilisation d'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));

L'exemple ci-dessus va afficher :

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

Sommaire

To Top