浅谈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 相关文章推荐
什么是MVC,好东西啊
May 03 PHP
php创建多级目录代码
Jun 05 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
Jul 18 PHP
php替换超长文本中的特殊字符的函数代码
May 22 PHP
php出现web系统多域名登录失败的解决方法
Sep 30 PHP
php通过ksort()函数给关联数组按照键排序的方法
Mar 18 PHP
PHP加密解密字符串汇总
Apr 26 PHP
PHP缩略图生成和图片水印制作
Jan 07 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
May 09 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
Nov 20 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
PHP实现单条sql执行多个数据的insert语句方法
Oct 11 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实现快速排序的三种方法分享
2014/03/12 PHP
Yii使用CLinkPager分页实例详解
2014/07/23 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
PHP实现的网站目录扫描索引工具
2016/09/08 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
PHP生成随机字符串实例代码(字母+数字)
2019/09/11 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
javascript 得到文件后缀名的思路及实现
2020/05/09 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
jQuery实现垂直半透明手风琴特效代码分享
2015/08/21 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
浅析Javascript匿名函数与自执行函数
2016/02/06 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
vue-cli的eslint相关用法
2017/09/29 Javascript
javascript实现文本框标签验证的实例代码
2018/10/14 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
2018/10/24 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
Python打包可执行文件的方法详解
2016/09/19 Python
python模拟事件触发机制详解
2018/01/19 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2018/05/08 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
Django框架反向解析操作详解
2019/11/28 Python
Python socket处理client连接过程解析
2020/03/18 Python
Python实现疫情地图可视化
2021/02/05 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
送达通知书
2015/04/25 职场文书
2019求职信大礼包
2019/05/15 职场文书
Python图片处理之图片裁剪教程
2021/05/27 Python
Python编程源码报错解决方法总结经验分享
2021/10/05 Python