我有一些我希望在磁盘上缓存的对象。我在这个过程中使用serialize()。对象包含对其他对象的一些引用。我不希望那些序列化(在其他地方完成)因为它会在反序列化时给我同一个真实世界对象的重复实例。
有没有办法在序列化之前将对象引用更改为字符串(引用相同的对象,但是通过ID),然后在类代码中执行此操作(而不是在(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();
答案 0 :(得分:3)
我认为你正在寻找__sleep()和__wakeup()。
答案 1 :(得分:1)
答案 2 :(得分:1)