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();
È stato utile?

Soluzione

Penso che si sta cercando __sleep () e __wakeup ().

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

Altri suggerimenti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top