PHP elimina riferimento all'oggetto prima serializzare, ripristinare dopo
-
19-09-2019 - |
Domanda
Ho alcuni oggetti che vorrei mettere in cache su disco. Io uso serialize () in questo processo. Gli oggetti contengono alcuni riferimenti ad altri oggetti. Non voglio coloro essere serializzato pure (che si fa in qualche altro posto) perché sarebbe darmi duplicare istanze dello stesso oggetto del mondo reale quando deserializzazione.
C'è un modo per cambiare i riferimenti agli oggetti alle stringhe (che si riferiscono agli stessi oggetti, ma per ID) prima di serializzazione e cambiarle indietro dopo, e per fare questo all'interno del codice della classe (non prima e dopo la (dis) serializzare dichiarazioni)?
Buono:
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();
Soluzione
Penso che si sta cercando __sleep () e __wakeup ().
Altri suggerimenti
Nota a sé: controllare la documentazione prima
http: // www .php.net / manuale / it / language.oop5.magic.php # language.oop5.magic.sleep
Sì. Dai un'occhiata alla __sleep e __wakeup