PHP supprimer la référence d'objet avant serialize, après la restauration
-
19-09-2019 - |
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();
La solution
Je pense que vous cherchez __sleep () et __wakeup ().
Autres conseils
Note à moi: vérifier docs premier
http: // www .php.net / manuel / fr / language.oop5.magic.php # language.oop5.magic.sleep
Oui. Jetez un oeil à __sleep et __wakeup