我有一些想要缓存在磁盘上的对象。我在这个过程中使用了 serialize() 。这些对象包含对其他对象的一些引用。我不希望这些也被序列化(在其他地方完成),因为它会在反序列化时给我相同的真实世界对象的重复实例。
有没有办法在序列化之前将对象引用更改为字符串(引用相同的对象,但通过 ID),并在之后将它们更改回来,并在类代码中执行此操作(而不是在 (un)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);
坏的:
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();