浅谈php serialize()与unserialize()的用法


Posted in PHP onJune 05, 2013

serialize()和unserialize()在php手册上的解释是:
serialize — Generates a storable representation of a value
serialize — 产生一个可存储的值的表示
unserialize — Creates a PHP value from a stored representation
unserialize — 从已存储的表示中创建 PHP 的值
很显然,"a stored representation"的解释翻译成了一个可存储的值后依然很让人非常费解它的意思。
如果语言已经无法表述清楚,那么我们可以以一个具体的PHP的例子来学习这两个函数的用途

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?php
//声明一个类
class dog {
    var $name;
    var $age;
    var $owner;
    function dog($in_name="unnamed",$in_age="0",$in_owner="unknown") {
        $this->name = $in_name;
        $this->age = $in_age;
        $this->owner = $in_owner;
    }
    function getage() {
        return ($this->age * 365);
    }    function getowner() {
        return ($this->owner);
    }
    function getname() {
        return ($this->name);
    }
}
//实例化这个类
$ourfirstdog = new dog("Rover",12,"Lisa and Graham");
//用serialize函数将这个实例转化为一个序列化的字符串
$dogdisc = serialize($ourfirstdog);
print $dogdisc; //$ourfirstdog 已经序列化为字符串 O:3:"dog":3:{s:4:"name";s:5:"Rover";s:3:"age";i:12;s:5:"owner";s:15:"Lisa and Graham";}
print '<BR>';
/* 
-----------------------------------------------------------------------
    在这里你可以将字符串 $dogdisc 存储到任何地方如 session,cookie,数据库,php文件 
-----------------------------------------------------------------------
*/
//我们在此注销这个类
unset($ourfirstdog);
/*    还原操作   */
/* 
-----------------------------------------------------------------------
    在这里将字符串 $dogdisc 从你存储的地方读出来如 session,cookie,数据库,php文件 
-----------------------------------------------------------------------
*/
//我们在这里用 unserialize() 还原已经序列化的对象
$pet = unserialize($dogdisc); //此时的 $pet 已经是前面的 $ourfirstdog 对象了
//获得年龄和名字属性
$old = $pet->getage();
$name = $pet->getname();
//这个类此时无需实例化可以继续使用,而且属性和值都是保持在序列化之前的状态
print "Our first dog is called $name and is $old days old<br>";
print '<BR>';
?>

例子中的对象我们还可以换为数组等其他类型,效果都是一样的!
其实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 相关文章推荐
基于文本的留言簿
Oct 09 PHP
PHP中数组的分组排序实例
Jun 01 PHP
PHP解码unicode编码的中文字符代码分享
Aug 13 PHP
PHP中创建图像并绘制文字的例子
Nov 19 PHP
使用Appcan客户端自动更新PHP版本号(全)
Jul 31 PHP
PHP查询附近的人及其距离的实现方法
May 11 PHP
深入理解PHP 数组之count 函数
Jun 13 PHP
php中时间函数date及常用的时间计算
May 12 PHP
PHP并发查询MySQL的实例代码
Aug 09 PHP
php表单处理操作
Nov 16 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 PHP
php pdo连接数据库操作示例
Nov 18 PHP
基于php 随机数的深入理解
Jun 05 #PHP
PHP autoload与spl_autoload自动加载机制的深入理解
Jun 05 #PHP
PHP中__get()和__set()的用法实例详解
Jun 04 #PHP
深入PHP运行环境配置的详解
Jun 04 #PHP
PHP运行环境配置与开发环境的配置(图文教程)
Jun 04 #PHP
如何设置mysql允许外网访问
Jun 04 #PHP
PHP在线生成二维码(google api)的实现代码详解
Jun 04 #PHP
You might like
谈一谈收音机的高放电路
2021/03/02 无线电
织梦模板标记简介
2007/03/11 PHP
解析php addslashes()与addclashes()函数的区别和比较
2013/06/24 PHP
django中的ajax组件教程详解
2018/10/18 PHP
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
js实现人才网站职位选择功能的方法
2015/08/14 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
详解Angularjs中的依赖注入
2016/03/11 Javascript
jQuery中设置form表单中action值的实现方法
2016/05/25 Javascript
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
node.js缺少mysql模块运行报错的解决方法
2016/11/13 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
layui实现多图片上传并限制上传的图片数量
2019/09/26 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
Vue实现图片轮播组件思路及实例解析
2020/05/11 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
python计算文本文件行数的方法
2015/07/06 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
Python 装饰器深入理解
2017/03/16 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
用python求一重积分和二重积分的例子
2019/12/06 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
python与c语言的语法有哪些不一样的
2020/09/13 Python
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
澳大利亚领先的美容护肤品零售商之一:SkincareStore
2018/01/22 全球购物
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
2015年学校食堂工作总结
2015/04/22 职场文书
辛德勒的名单观后感
2015/06/03 职场文书
爱护公物主题班会
2015/08/17 职场文书
Mysql - 常用函数 每天积极向上
2021/04/05 MySQL