PHP在序列化之前删除对象引用,之后还原

时间:2010-02-09 22:33:36

标签: php serialization object-serialization

我有一些我希望在磁盘上缓存的对象。我在这个过程中使用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();

3 个答案:

答案 0 :(得分:3)

我认为你正在寻找__sleep()和__wakeup()。

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

答案 1 :(得分:1)

答案 2 :(得分:1)

是。看看__sleep and __wakeup