1
我面临一个问题,我想将SplHeap(或任何其他类型的Spl堆类对象,例如SplPriorityQueue,SplMinHeap,SplMaxHeap)存储到我的Memcached为了稍后使用它们。如何序列化PHP SplHeap以存储到memcached中
我注意到没有序列化,会导致丢失存储在堆中的数据。
对这件事的任何建议?或者如何序列化PHP SplHeap?
谢谢
我面临一个问题,我想将SplHeap(或任何其他类型的Spl堆类对象,例如SplPriorityQueue,SplMinHeap,SplMaxHeap)存储到我的Memcached为了稍后使用它们。如何序列化PHP SplHeap以存储到memcached中
我注意到没有序列化,会导致丢失存储在堆中的数据。
对这件事的任何建议?或者如何序列化PHP SplHeap?
谢谢
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类中声明特殊的功能。