PHP удалить ссылку на объект перед сериализацией, восстановить после - PullRequest
1 голос
/ 10 февраля 2010

У меня есть несколько объектов, которые я хочу кэшировать на диске. Я использую serialize () в этом процессе. Объекты содержат некоторые ссылки на другие объекты. Я не хочу, чтобы они тоже сериализовались (это делается в каком-то другом месте), потому что это дало бы мне двойные экземпляры того же объекта реального мира при десериализации.

Есть ли способ изменить ссылки на объекты на строки (ссылаясь на те же объекты, но по идентификатору) до сериализации и изменения их обратно после, и сделать это внутри кода класса (не до и после Сериализация операторов)?

Хорошо:

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();

Ответы [ 3 ]

3 голосов
/ 10 февраля 2010

Я думаю, что вы ищете __sleep () и __wakeup ().

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

1 голос
/ 10 февраля 2010

Да. Посмотрите на __ sleep и __wakeup

1 голос
/ 10 февраля 2010

Примечание для себя: сначала проверьте документы

http://www.php.net/manual/en/language.oop5.magic.php#language.oop5.magic.sleep

...