第十三节 对象串行化 [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 相关文章推荐
phpfans留言版用到的install.php
Jan 04 PHP
php Static关键字实用方法
Jun 04 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
Jul 04 PHP
PHP递归算法的详细示例分析
Feb 19 PHP
PHP实现设计模式中的抽象工厂模式详解
Oct 11 PHP
Yii实现显示静态页的方法
Apr 25 PHP
PHP简单实现文本计数器的方法
Apr 28 PHP
[原创]PHP字符串中插入子字符串方法总结
May 06 PHP
PHP实现微信商户支付企业付款到零钱功能
Sep 30 PHP
laravel框架邮箱认证实现方法详解
Nov 22 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
Dec 30 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实现ping
2006/10/09 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
PHP跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
PHP模板解析类实例
2015/07/09 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
eclipse php wamp配置教程
2016/06/30 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
JavaScript 函数调用规则
2009/09/14 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
快速掌握Node.js模块封装及使用
2016/03/21 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
js实现淘宝首页的banner栏效果
2019/11/26 Javascript
Django中的Signal代码详解
2018/02/05 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
Python3几个常见问题的处理方法
2019/02/26 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
师范应届生求职信
2013/11/15 职场文书
《猫》教学反思
2014/02/26 职场文书
生产部厂长助理职位说明书
2014/03/03 职场文书
陈胜吴广起义口号
2014/06/20 职场文书
网站出售协议书范文
2014/10/10 职场文书
公司股东出资证明书
2014/11/01 职场文书
解除租房协议书
2014/12/03 职场文书
2016年五四青年节校园广播稿
2015/12/17 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
数据库之SQL技巧整理案例
2021/07/07 SQL Server