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();
¿Fue útil?

Solución

Creo que busca __sleep () y __wakeup ().

http://php.net/manual/en/language.oop5 .magic.php

Otros consejos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top