Frage

ich einige Objekte haben, dass ich in den Cache auf der Festplatte möchten. Ich benutze serialize () in diesem Prozess. Die Objekte enthalten einige Verweise auf andere Objekte. Ich möchte nicht, diese ebenfalls serialisiert werden (die an einem anderen Ort durchgeführt wird), weil es würde mir Instanzen desselben reale Objekt duplizieren, wenn deserialisieren.

Gibt es eine Möglichkeit, die Objektreferenzen in Strings zu ändern (in Bezug auf die gleichen Objekte, sondern von ID) vor der Serialisierung und sie wieder nach dem Wechsel, und dies innerhalb der Klasse Code zu tun (nicht vor und nach dem (un) serialize Aussagen)?

Gut:

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();
War es hilfreich?

Lösung

Ich glaube, Sie suchen nach __sleep () und __wakeup ().

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

Andere Tipps

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top