PHP удаляет ссылку на объект перед сериализацией, восстанавливает после

StackOverflow https://stackoverflow.com/questions/2233008

Вопрос

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

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

Хороший:

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

Плохой:

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();
Это было полезно?

Решение

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

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

Другие советы

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

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

Да.Посмотри на __сон и __пробуждение

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top