浅谈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
一个简单的自动发送邮件系统(三)
Oct 09 PHP
php操作sqlserver关于时间日期读取的小小见解
Nov 29 PHP
php将会员数据导入到ucenter的代码
Jul 18 PHP
php表单转换textarea换行符的方法
Sep 10 PHP
php中session使用示例
Mar 29 PHP
php中字符串和正则表达式详解
Oct 23 PHP
php有效防止同一用户多次登录
Nov 19 PHP
PHP的swoole扩展安装方法详细教程
May 18 PHP
PHP环境搭建的详细步骤
Jun 30 PHP
php 时间time与日期date之间的使用详解及区别
Nov 07 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
Sep 30 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
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
JavaScript基础知识之数据类型
2012/08/06 Javascript
js中的前绑定和后绑定详解
2013/08/01 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
js笔试题-接收get请求参数
2019/06/15 Javascript
npm的lock机制解析
2019/06/20 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
2020/09/11 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
Python入门篇之条件、循环
2014/10/17 Python
Python操作列表之List.insert()方法的使用
2015/05/20 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
Python网络编程 Python套接字编程
2017/09/13 Python
python用户管理系统的实例讲解
2017/12/23 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
酒店司机岗位职责
2013/12/14 职场文书
优秀医生事迹材料
2014/02/12 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
在人间读书笔记
2015/06/30 职场文书
读书笔记格式
2015/07/02 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
调解协议书范本
2016/03/21 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python
如何优化vue打包文件过大
2022/04/13 Vue.js