PHP удаляет ссылку на объект перед сериализацией, восстанавливает после
-
19-09-2019 - |
Вопрос
У меня есть несколько объектов, которые я хочу кэшировать на диске.В этом процессе я использую сериализацию().Объекты содержат некоторые ссылки на другие объекты.Я не хочу, чтобы они также были сериализованы (это делается в каком-то другом месте), потому что при десериализации это дало бы мне дублирующиеся экземпляры одного и того же реального объекта.
Есть ли способ изменить ссылки на объекты на строки (ссылающиеся на те же объекты, но по идентификатору) перед сериализацией и изменить их обратно после, и сделать это внутри кода класса (не до и после операторов (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://www.php.net/manual/en/language.oop5.magic.php#language.oop5.magic.sleep
Да.Посмотри на __сон и __пробуждение