2013-03-09 55 views
1

我面临一个问题,我想将SplHeap(或任何其他类型的Spl堆类对象,例如SplPriorityQueue,SplMinHeap,SplMaxHeap)存储到我的Memcached为了稍后使用它们。如何序列化PHP SplHeap以存储到memcached中

我注意到没有序列化,会导致丢失存储在堆中的数据。

对这件事的任何建议?或者如何序列化PHP SplHeap?

谢谢

回答

1

SPL带有一个Serializable接口。所以你的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接口实现了序列化()和反序列化()方法。所以你可以在你的splheap类中声明特殊的功能。