PHP 序列化和反序列化函数实例详解


Posted in PHP onJuly 18, 2020

序列化与反序列化

把复杂的数据类型压缩到一个字符串中

serialize() 把变量和它们的值编码成文本形式
unserialize() 恢复原先变量 

1.创建一个$arr数组用于储存用户基本信息,并在浏览器中输出查看结果;

$arr=array();
$arr['name']='张三';
$arr['age']='22';
$arr['sex']='男';
$arr['phone']='123456789';
$arr['address']='上海市浦东新区';
var_dump($arr);

输出结果:

array(5) { 
["name"]=> string(6) "张三" 
["age"]=> string(2) "22" 
["sex"]=> string(3) "男" 
["phone"]=> string(9) "123456789" 
["address"]=> string(21) "上海市浦东新区"
 }

2.将$arr数组进行序列化赋值给$info字符串,并在浏览器中输出查看结果;

$info=serialize($arr);
var_dump($info);

输出结果:

string(140) "a:5:{s:4:"name";s:6:"张三";s:3:"age";s:2:"22";s:3:"sex";s:3:"男";s:5:"phone";s:9:"123456789";s:7:"address";s:21:"上海市浦东新区";}"

使用序列化serialize($arr)函数,将数组中元素的键和值按照规则顺序连接成字符串。a:5标志序列化为array包含5个键值对,s:4标志内容为字符串包含4个字符。

通过序列化我们可以将一些模块化的数据使用字符串的形式存储在数据库或session等,可以减少创建众多繁琐的数据表字段,当然序列化为字符串存储会增加额外的空间,应合理的设计和应用。

3.最后使用unserialize($info)反序列化将字符串还原成我们需要的数组模式;

$zhangsan=unserialize($info);
var_dump($zhangsan);

输出结果:

array(5) {
["name"]=> string(6) "张三" 
["age"]=> string(2) "22" 
["sex"]=> string(3) "男" 
["phone"]=> string(9) "123456789" 
["address"]=> string(21) "上海市浦东新区" 
}

PHP序列化反序列化serialize和unserialize函数

昨天网上看到一道面试题,如下:

“类的属性可以序列化后保存到session中,从而以后可以恢复整个类,这要用到的函数是?”

我记得原来老师说过序列化函数是"serialize",查了下,果不其然,今天记录下,免得忘记。

<?php
  class aa{
    public $a = 1;
    private $b = 2;
    protected $c = 3;
 
    function afun(){
      return $this->a;
    }
    function bfun(){
      return $this->b;
    }
    function __destruct(){
      echo "变量销毁了";
    }
  }
 
  $v = new aa;
  echo $v->afun();
  $se = serialize($v);
  unset($v); //这里先销毁$v,这个时候会自动调用析构函数
  echo "<hr />";
  $v = unserialize($se); //再反序列化
  echo $v->bfun();

看看运行结果

PHP 序列化和反序列化函数实例详解

如果觉得还不明显, 好,我们在改一下代码

aa.class.php

<?php
  class aa{
    public $a = 1;
    private $b = 2;
    protected $c = 3;
 
    function afun(){
      return '$a的值是:'.$this->a;
    }
    function bfun(){
      return '$b的值是:'.$this->b;
    }
  }

a1.php

<?php
  require './demo8.php';
  Session_start();
  $v = new aa();
  $_SESSION['v'] = serialize($v);

a2.php

<?php
  require './demo8.php';
  Session_start();
  $v = unserialize($_SESSION['v']);
  echo $v->bfun();

再看看结果是不是一目了然了呢,好了,试验做完了,结论调用下公论。
例子中的对象我们还可以换为数组等其他类型,效果都是一样的!
其实serialize()就是将PHP中的变量如对象(object),数组(array)等等的值序列化为字符串后存储起来.序列化的字符串我们可以存储在其他地方如数据库、Session、Cookie等,序列化的操作并不会丢失这些值的类型和结构。这样这些变量的数据就可以在PHP页面、甚至是不同PHP程序间传递了。
而unserialize()就是把序列化的字符串转换回PHP的值。

这里再引用一段PHP手册上的说明,看了上面的例子,应该很容易明白下面这些话的意思了
想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()。serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组/对象中的引用也将被存储。

当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数
unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。返回的是转换之后的值,可为 integer、float、string、array 或 object。如果传递的字符串不可解序列化,则返回 FALSE。

以上所述是小编给大家介绍的PHP 序列化和反序列化函数实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP在字符断点处截断文字的实现代码
Apr 21 PHP
PHP 时间日期操作实战
Aug 26 PHP
解析php二分法查找数组是否包含某一元素
May 23 PHP
PHP父类调用子类方法的代码例子
Apr 09 PHP
PHP提交表单失败后如何保留已经填写的信息
Jun 20 PHP
php中的常用魔术方法汇总
Feb 14 PHP
PHP根据session与cookie用户登录状态操作类的代码
May 13 PHP
YII视图整合kindeditor扩展的方法
Jul 13 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
Aug 21 PHP
php生成静态页面并实现预览功能
Jun 27 PHP
php多进程应用场景实例详解
Jul 22 PHP
PHP之header函数详解
Mar 02 PHP
php头像上传预览实例代码
May 02 #PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
May 02 #PHP
AJAX的使用方法详解
Apr 29 #PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 #PHP
PHP编程实现csv文件导入mysql数据库的方法
Apr 29 #PHP
PHP实现ASCII码与字符串相互转换的方法
Apr 29 #PHP
PHP中Notice错误常见解决方法
Apr 28 #PHP
You might like
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
浅析php静态方法与非静态方法的用法区别
2016/05/17 PHP
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
利用jquery写的左右轮播图特效
2014/02/12 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
用Node.js通过sitemap.xml批量抓取美女图片
2015/05/28 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
Python读取图片EXIF信息类库介绍和使用实例
2014/07/10 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
Python爬虫beautifulsoup4常用的解析方法总结
2019/02/25 Python
Python 项目转化为so文件实例
2019/12/23 Python
Jupyter Notebook安装及使用方法解析
2020/11/12 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
办公室经理岗位职责
2014/01/01 职场文书
师德个人剖析材料
2014/02/02 职场文书
安全生产管理责任书
2014/04/16 职场文书
推广普通话标语
2014/06/27 职场文书
学法用法心得体会(2016推荐篇)
2016/01/21 职场文书
SQL中的三种去重方法小结
2021/11/01 SQL Server
Python MNIST手写体识别详解与试练
2021/11/07 Python
Python中time标准库的使用教程
2022/04/13 Python
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers