第十三节 对象串行化 [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创建PDF中文文档
Oct 09 PHP
php在服务器执行exec命令失败的解决方法
Mar 03 PHP
PHP删除数组中的特定元素的代码
Jun 28 PHP
thinkphp验证码显示不出来的解决方法
Mar 29 PHP
PHP+memcache实现消息队列案例分享
May 21 PHP
php.ini save_handler 修改不生效的解决办法
Jul 22 PHP
Yii中Model(模型)的创建及使用方法
Dec 28 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
PHP第三方登录―QQ登录实现方法
Feb 06 PHP
php实现的中文分词类完整实例
Feb 06 PHP
PHP处理bmp格式图片的方法分析
Jul 04 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
Sep 29 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最常用的正则表达式
2017/02/13 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
海量经典的jQuery插件集合
2010/01/12 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
js中this用法实例详解
2015/05/05 Javascript
JQuery ztree带筛选、异步加载实例讲解
2016/02/25 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
JS组件Bootstrap实现图片轮播效果
2016/05/16 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
2016/09/04 Javascript
浅谈AngularJS中ng-class的使用方法
2016/11/11 Javascript
Bootstrap基本样式学习笔记之标签(5)
2016/12/07 Javascript
js实现分页功能
2017/05/24 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
浅谈Python中的数据类型
2015/05/05 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
Python 防止死锁的方法
2020/07/29 Python
整理HTML5的一些新特性与Canvas的常用属性
2016/01/29 HTML / CSS
Android interview questions
2016/12/25 面试题
汉语专业应届生求职信
2013/10/01 职场文书
土木工程应届生求职信
2013/10/31 职场文书
计算机求职信
2013/12/01 职场文书
简历中自我评价范文3则
2013/12/14 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
2015年人事工作总结范文
2015/04/09 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书
Nginx反向代理配置的全过程记录
2021/06/22 Servers
简单谈谈Python面向对象的相关知识
2021/06/28 Python
oracle索引总结
2021/09/25 Oracle
关于 Python json中load和loads区别
2021/11/07 Python