1

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

3 回答 3

3

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

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

于 2010-02-09T22:37:08.123 回答
1

自我注意:首先检查文档

http://www.php.net/manual/en/language.oop5.magic.php#language.oop5.magic.sleep

于 2010-02-09T22:35:09.003 回答
1

是的。看看__sleep 和 __wakeup

于 2010-02-09T22:36:29.373 回答