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自定义函数实现代码
Dec 30 PHP
解决php接收shell返回的结果中文乱码问题
Jan 23 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
Jun 26 PHP
php中用memcached实现页面防刷新功能
Aug 19 PHP
ThinkPHP自动填充实现无限级分类的方法
Aug 22 PHP
PHP中使用imagick生成PSD文件缩略图教程
Jan 26 PHP
Linux下编译redis和phpredis的方法
Apr 07 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
PHP 中TP5 Request 请求对象的实例详解
Jul 31 PHP
PHP PDOStatement::getAttribute讲解
Feb 01 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
Mar 06 PHP
Laravel框架实现的使用smtp发送邮件功能示例
Mar 12 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
php pack与unpack 摸板字符字符含义
2009/10/29 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
2014/04/18 PHP
php+ajax导入大数据时产生的问题处理
2014/06/11 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
2017/03/14 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
Javascript在IE或Firefox下获取鼠标位置的代码
2009/12/18 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
jQuery jcrop插件截图使用方法
2013/11/20 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
2018/09/02 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
Python中的rfind()方法使用详解
2015/05/19 Python
基于python的七种经典排序算法(推荐)
2016/12/08 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
Python实现八皇后问题示例代码
2018/12/09 Python
详解Python是如何实现issubclass的
2019/07/24 Python
Python如何绘制日历图和热力图
2020/08/07 Python
阿拉伯世界最大的电子商务网站:Souq沙特阿拉伯
2016/10/28 全球购物
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
毕业生自荐书模版
2014/01/04 职场文书
党支部书记先进事迹
2014/01/17 职场文书
创建精神文明单位实施方案
2014/03/08 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
公路绿化方案
2014/05/12 职场文书
先进集体申报材料
2014/12/25 职场文书
Python  lambda匿名函数和三元运算符
2022/04/19 Python
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers