1

後で使用するために、SplHeap(またはSplPriorityQueue、SplMinHeap、SplMaxHeapなどの他の種類のSplヒープのようなオブジェクト)をMemcachedの場所に保存したいという問題に直面しています。

シリアル化せずに実行すると、ヒープに格納されているデータが失われることに気付きました。

この問題について何か提案はありますか?またはPHPSplHeapをシリアル化する方法は?

ありがとうございました

4

1 に答える 1

1

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 クラスで特別な機能を宣言できます。

于 2013-03-27T10:59:27.463 に答える