Las referencias débiles proporcionan una vía no intrusiva para objetos efímeros. A diferencia de las referencias normales (fuertes), las referencias débiles no evita que el recolector de basura libere un objeto. Por esta razón, un objeto podría ser destruido aunque aún exista una referencia débil a tal objeto. En tales condiciones, la referencia débil sería perfectamente inválida.
Ejemplo #1 Ejemplo de uso de Weakref
<?php
class MiClase {
public function __destruct() {
echo "¡Destruyendo el objeto!\n";
}
}
$o1 = new MiClase;
$r1 = new Weakref($o1);
if ($r1->valid()) {
echo "¡El objeto aún existe!\n";
var_dump($r1->get());
} else {
echo "¡El objeto está muerto!\n";
}
unset($o1);
if ($r1->valid()) {
echo "¡El objeto aún existe!\n";
var_dump($r1->get());
} else {
echo "¡El objeto está muerto!\n";
}
?>
El resultado del ejemplo sería:
¡El objeto aún existe! object(MiClase)#1 (0) { } ¡Destruyendo el objeto! ¡El objeto está muerto!