У меня есть несколько объектов, которые я хочу кэшировать на диске. Я использую 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();