2013-03-09 3 views
1

У меня возникла проблема с тем, что я хотел бы хранить SplHeap (или любые другие типы объектов с кучей Spl, таких как SplPriorityQueue, SplMinHeap, SplMaxHeap) в местоположение мой Memcached, чтобы использовать их позже.Как сериализовать PHP SplHeap для хранения в memcached

Я заметил, что выполнение этого без сериализации приведет к потере данных, хранящихся в куче.

Любое предложение по этому вопросу? или как сериализовать PHP SplHeap?

Спасибо

ответ

1

Уровень звукового давления поставляется с 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); 
     } 
    } 

}

сериализуемый интерфейс реализует Serialize() и десериализации() методы. Таким образом, вы можете объявить специальную функциональность в своем классе splheap.