PHP eliminar referencia a un objeto antes de serializar, después de restaurar
-
19-09-2019 - |
Pregunta
Tengo algunos objetos que desea almacenar en caché en el disco. Yo uso serialize () en este proceso. Los objetos contienen algunas referencias a otros objetos. No quiero que los que se va a serializar también (lo que se hace en algún otro lugar), ya que me diera a duplicar instancias del mismo objeto del mundo real cuando revertir la seriación.
¿Hay una manera de cambiar las referencias de objetos a cadenas (en referencia a los mismos objetos, pero por ID) antes de la serialización y cambiando de nuevo después, y para ello dentro del código de la clase (no antes y después de la (des) serializar declaraciones)?
Buena:
class TheStuff {
private $otherThing;
private function __yeahDudeDoThisOnSerialize() {
$this->otherThing = $this->otherThing->name;
}
private function __viceVersa() {
$this->otherThing = get_thing_by_name($this->otherThing);
}
}
serialize($someStuff);
Bad:
class TheStuff {
private $otherThing;
public function yeahDudeDoThisOnSerialize() {
$this->otherThing = $this->otherThing->name;
}
public function viceVersa() {
$this->otherThing = get_thing_by_name($this->otherThing);
}
}
$someStuff->yeahDudeDoThisOnSerialize();
serialize($someStuff);
$someStuff->viceVersa();
Solución
Creo que busca __sleep () y __wakeup ().
Otros consejos
Nota mental: comprobar docs primera
http: // www .php.net / manual / es / language.oop5.magic.php # language.oop5.magic.sleep
Sí. Echar un vistazo a __sleep y __wakeup