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 に答える