文档章节

SplPriorityQueue 序列化并反序列化后结果为空问题解决

宇润
 宇润
发布于 2018/12/19 13:46
字数 369
阅读 19
收藏 0

今天在尝试把SplPriorityQueue对象序列化并反序列化后,遇到了问题。反序列化后在队列里的数据全没了,这让我很伤心。

<?php
$pq = new SplPriorityQueue;
$pq->insert('imi 基于 Swoole 常驻内存协程开发框架', 100);
$pq->insert('https://gitee.com/yurunsoft/IMI', 200);
$pq->insert('https://github.com/Yurunsoft/IMI', 300);
var_dump($pq->count());

$serialize = serialize($pq);
var_dump($serialize);

$unserialize = unserialize($serialize);
var_dump($unserialize->count());

结果:

int(3)
string(28) "O:16:"SplPriorityQueue":0:{}"
int(0)

莫得办法,自己动手丰衣足食吧!通过自定义类继承SplPriorityQueue并实现Serializable接口,来自己处理序列化和反序列化数据。

解决问题的代码如下:

class PriorityQueue extends \SplPriorityQueue implements \Serializable
{
    public function serialize()
    {
        return serialize(iterator_to_array(clone $this));
    }

    public function unserialize($serialized)
    {
        $array = unserialize($serialized);
        foreach($array as $p => $v)
        {
            $this->insert($v, $p);
        }
    }
}

$pq = new PriorityQueue;
$pq->insert('imi 基于 Swoole 常驻内存协程开发框架', 100);
$pq->insert('https://gitee.com/yurunsoft/IMI', 200);
$pq->insert('https://github.com/Yurunsoft/IMI', 300);
var_dump($pq->count());

$serialize = serialize($pq);
var_dump($serialize);

$unserialize = unserialize($serialize);
var_dump($unserialize->count());

结果:

int(3)
string(180) "C:13:"PriorityQueue":153:{a:3:{i:2;s:32:"https://github.com/Yurunsoft/IMI";i:1;s:31:"https://gitee.com/yurunsoft/IMI";i:0;s:48:"imi 基于 Swoole 常驻内存协程开发框架";}}"
int(3)

完美解决~

© 著作权归作者所有

宇润

宇润

粉丝 74
博文 18
码字总数 11174
作品 17
无锡
技术主管
私信 提问
fastjson循环引用反序列化时的问题

在使用fastjson时(版本1.2.16),发现循环引用一旦涉及到继承时,反序列化会出现问题(正向序列化没问题): 循环引用部分将无法反序列化回子类对象。 下面列出我的测试类: 一共有三个类,Nod...

Ace_Xiong
2016/09/05
784
6
PHP反序列化漏洞系列之–PHP序列化和反序列化原理

0.前言 本文为笃行日常学习记录,web安全php漏洞系列。 对象的序列化和反序列化作用就不再赘述,php中序列化的结果是一个php自定义的字符串格式,有点类似json. 我们在任何语言中设计对象的序列...

fobnn
2018/08/27
0
0
深入认识二进制序列化--记一次生产事故的思考

一 概要 二进制序列化是公司内部自研微服务框架的主要的数据传输处理方式,但是普通的开发人员对于二进制的学习和了解并不深入,容易导致使用过程中出现了问题却没有分析解决的思路。本文从一...

hkant
07/01
0
0
关于Jackson默认丢失Bigdecimal精度问题分析

问题描述 最近在使用一个内部的RPC框架时,发现如果使用Object类型,实际类型为BigDecimal的时候,作为传输对象的时候,会出现丢失精度的问题;比如在序列化前为金额1.00,反序列化之后为1.0...

ksfzhaohui
2018/10/22
1K
3
[原译]YAXLib---- XML序列化神器

今天早上翻译了Yet-Another-XML-Serialization-Library-for-the-NET,将近4个小时把30页的文档翻译完了。因为文章很长。重新排版压力太大。。我把翻译好的做成了pdf,所以本文只列出前两部分...

长平狐
2012/10/11
199
0

没有更多内容

加载失败,请刷新页面

加载更多

巨杉Tech | Hbase迁移至SequoiaDB 实战

背景 在传统银行 IT 架构中,联机交易与统计分析系统往往采用不同的技术与物理设备,通过定期执行的 ETL 将联机交易数据向分析系统中迁移。而作为数据服务资源池,同一份数据可能被不同类型的...

巨杉数据库
31分钟前
5
0
关于快速开发框架:网红妹纸,给了我一个idea!

我是一名软件公司的员工,从事撸码事业也有一段时间了。码代码已经成为我生活的一部分,我的撸码的生活几乎一成不变。直到有一天,写字楼搬来了一家网络红公司! 网红公司,什么是网红公司,...

我想造火箭
33分钟前
8
0
Java操作栈-表达式求值

package stack.demo;import java.io.IOException;import java.util.Scanner;import java.util.Stack;/** * 表达式求值 算符优先法 * 3*(5-2)# #在这里表示结尾 * ...

FeanLau
43分钟前
5
0
Java内功心法,Set集合的详解

本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门:https://mp.weixin.qq.com/s/Jzdd...

李红欧巴
45分钟前
23
0
微博 2 亿日活背后,广告系统不掉线的全景运维大法

https://www.infoq.cn/article/wfHffPqV2f4Y5M1y6Mf2

perofu
49分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部