後で使用するために、SplHeap(またはSplPriorityQueue、SplMinHeap、SplMaxHeapなどの他の種類のSplヒープのようなオブジェクト)をMemcachedの場所に保存したいという問題に直面しています。
シリアル化せずに実行すると、ヒープに格納されているデータが失われることに気付きました。
この問題について何か提案はありますか?またはPHPSplHeapをシリアル化する方法は?
ありがとうございました
後で使用するために、SplHeap(またはSplPriorityQueue、SplMinHeap、SplMaxHeapなどの他の種類のSplヒープのようなオブジェクト)をMemcachedの場所に保存したいという問題に直面しています。
シリアル化せずに実行すると、ヒープに格納されているデータが失われることに気付きました。
この問題について何か提案はありますか?またはPHPSplHeapをシリアル化する方法は?
ありがとうございました
SPL にはシリアライズ可能なインターフェイスが付属しています。したがって、SplHeap クラスは、次のコードのようにこのインターフェイスを実装する必要があります。
class MySplHeap extends SplMinHeap implements Serializable {
public function compare(ArrayObject $a, ArrayObject $b) {
return ($b->member - $a->member);
}
public function serialize() {
$objects = new ArrayObject();
$heap = clone $this;
foreach ($heap as $node) {
$objects[] = $node;
}
return serialize($objects);
}
public function unserialize($serializedData) {
if (!is_object($serializedData) && gettype($serializedData) == 'object') {
$serializedData = serialize($serializedData);
}
$objects = unserialize($serializedData);
foreach ($objects as $node) {
$this->insert($node);
}
}
}
Serializable インターフェイスは、serialize() および unserialize() メソッドを実装します。したがって、splheap クラスで特別な機能を宣言できます。