Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何序列化PHP堆以存储到memcached中_Php_Memcached_Serializable_Spl - Fatal编程技术网

如何序列化PHP堆以存储到memcached中

如何序列化PHP堆以存储到memcached中,php,memcached,serializable,spl,Php,Memcached,Serializable,Spl,我面临一个问题,我想将一个SplHeap(或任何其他类型的类似Spl heap的对象,如SplPriorityQueue、SplMinHeap、SplMaxHeap)存储到Memcached的一个位置,以便以后使用它们 我注意到,如果不进行序列化,将导致丢失存储在堆中的数据 对这件事有什么建议吗?或者如何序列化PHP堆 谢谢SPL带有一个可序列化的接口。因此,您的SplHeap类应该像下面的代码一样实现这个接口 class MySplHeap extends SplMinHeap impleme

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

我注意到,如果不进行序列化,将导致丢失存储在堆中的数据

对这件事有什么建议吗?或者如何序列化PHP堆


谢谢

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类中声明特殊功能。

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类中声明特殊功能