第十三节 对象串行化 [13]


Posted in PHP onOctober 09, 2006

串行化可以把变量包括对象,转化成连续bytes数据. 你可以将串行化后的变量存在一个文件里或在网络上传输. 然后再反串行化还原为原来的数据. 你在反串行化类的对象之前定义的类,PHP可以成功地存储其对象的属性和方法. 有时你可能需要一个对象在反串行化后立即执行. 为了这样的目的,PHP会自动寻找__sleep和__wakeup方法.

当一个对象被串行化,PHP会调用__sleep方法(如果存在的话). 在反串行化一个对象后,PHP 会调用__wakeup方法. 这两个方法都不接受参数. __sleep方法必须返回一个数组,包含需要串行化的属性. PHP会抛弃其它属性的值. 如果没有__sleep方法,PHP将保存所有属性.

例子6.16显示了如何用__sleep和__wakeup方法来串行化一个对象. Id属性是一个不打算保留在对象中的临时属性. __sleep方法保证在串行化的对象中不包含id属性. 当反串行化一个User对象,__wakeup方法建立id属性的新值. 这个例子被设计成自我保持. 在实际开发中,你可能发现包含资源(如图像或数据流)的对象需要这些方法.

Listing 6.16 Object serialization
<?php

class User
{
public $name;
public $id;

function __construct()
{
//give user a unique ID 赋予一个不同的ID
$this->id = uniqid();
}

function __sleep()
{
//do not serialize this->id 不串行化id
return(array("name"));
}

function __wakeup()
{
//give user a unique ID
$this->id = uniqid();
}
}

//create object 建立一个对象
$u = new User;
$u->name = "Leon";

//serialize it 串行化 注意不串行化id属性,id的值被抛弃
$s = serialize($u);

//unserialize it 反串行化 id被重新赋值
$u2 = unserialize($s);

//$u and $u2 have different IDs $u和$u2有不同的ID
print_r($u);
print_r($u2);
?>

PHP 相关文章推荐
在PHP中使用灵巧的体系结构
Oct 09 PHP
模仿OSO的论坛(四)
Oct 09 PHP
PHP中将数组转成XML格式的实现代码
Aug 08 PHP
php中设置多级目录session的问题
Aug 08 PHP
Yii使用ajax验证显示错误messagebox的解决方法
Dec 03 PHP
PHP使用header()输出图片缓存实例
Dec 09 PHP
Zend Framework过滤器Zend_Filter用法详解
Dec 09 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
PHP等比例压缩图片的实例代码
Jul 26 PHP
PHP PDOStatement::execute讲解
Jan 31 PHP
PHP去除空数组且数组键名重置的讲解
Feb 28 PHP
php5.6.x到php7.0.x特性小结
Aug 17 PHP
第七节 类的静态成员 [7]
Oct 09 #PHP
用PHP实现文件上传二法
Oct 09 #PHP
PHP安装全攻略:APACHE
Oct 09 #PHP
用PHP生成自己的LOG文件
Oct 09 #PHP
VFP与其他应用程序的集成
Oct 09 #PHP
PHP中在数据库中保存Checkbox数据(1)
Oct 09 #PHP
分页显示Oracle数据库记录的类之二
Oct 09 #PHP
You might like
php 移除数组重复元素的一点说明
2008/11/27 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
php 猴子摘桃的算法
2017/06/20 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
Angular自定义组件实现数据双向数据绑定的实例
2017/12/11 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
jquery实现下载图片功能
2019/07/18 jQuery
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
实例讲解JavaScript 计时事件
2020/07/04 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
Pyhton中防止SQL注入的方法
2015/02/05 Python
Python单元测试框架unittest简明使用实例
2015/04/13 Python
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
详解Python yaml模块
2020/09/23 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
STUBHUB日本:购买和出售全球活动门票
2018/07/01 全球购物
质检部岗位职责
2013/11/11 职场文书
后勤岗位职责
2013/11/26 职场文书
优秀幼教自荐信
2014/02/03 职场文书
敬老模范事迹
2014/05/21 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
2014年平安夜寄语
2014/12/08 职场文书
2016年主题党日活动总结
2016/04/05 职场文书
MySQL窗口函数的具体使用
2021/11/17 MySQL
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python