Question

J'ai quelques objets que je souhaite mettre en cache sur le disque. J'utilise serialize () dans ce processus. Les objets contiennent des références à d'autres objets. Je ne veux pas être ceux sérialisés ainsi (ce qui se fait dans un autre lieu) parce qu'il me donnerait dupliquer les instances du même objet dans le monde réel quand délinéarisation.

Est-il possible de changer les références d'objets à cordes (se référant aux mêmes objets, mais par ID) avant sérialisation et de les changer en arrière après, et de le faire à l'intérieur du code de classe (pas avant et après le (non) sérialisation déclarations)?

Bon:

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();
Était-ce utile?

La solution

Je pense que vous cherchez __sleep () et __wakeup ().

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top