【问题标题】:How to serialize a PHP SplHeap for storing into memcached如何序列化 PHP SplHeap 以存储到 memcached
【发布时间】:2013-03-09 20:07:43
【问题描述】:

我遇到了一个问题,我想将一个 SplHeap(或任何其他类型的类似 Spl 堆的对象,例如 SplPriorityQueue、SplMinHeap、SplMaxHeap)存储到我的 Memcached 的某个位置,以便以后使用它们。

我注意到在没有序列化的情况下这样做会导致丢失存储在堆中的数据。

对这个问题有什么建议吗?或者如何序列化 PHP SplHeap?

谢谢

【问题讨论】:

    标签: php memcached serializable spl


    【解决方案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-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 2016-02-08
      相关资源
      最近更新 更多