第十三节 对象串行化 [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 相关文章推荐
人大复印资料处理程序_查询篇
Oct 09 PHP
我的论坛源代码(五)
Oct 09 PHP
PHP判断远程url是否有效的几种方法小结
Oct 08 PHP
自己在做项目过程中学到的PHP知识收集
Aug 20 PHP
基于php下载文件的详解
Jun 02 PHP
php自定文件保存session的方法
Dec 10 PHP
CodeIgniter配置之SESSION用法实例分析
Jan 19 PHP
基于laravel制作APP接口(API)
Mar 15 PHP
PHP简单预防sql注入的方法
Sep 27 PHP
php获取小程序码的实现代码(B类接口)
Jun 13 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
Oct 20 PHP
php框架知识点的整理和补充
Mar 01 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 函数中使用static的说明
2012/06/01 PHP
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
简单谈谈PHP中的Reload操作
2016/12/12 PHP
php读取本地json文件的实例
2018/03/07 PHP
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
javascript函数定义的几种区别小结
2014/01/06 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
Vue自定义图片懒加载指令v-lazyload详解
2020/12/31 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
vue动态绑定组件子父组件多表单验证功能的实现代码
2018/05/14 Javascript
详解angular如何调用HTML字符串的方法
2018/06/30 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
Python的Urllib库的基本使用教程
2015/04/30 Python
通过数据库向Django模型添加字段的示例
2015/07/21 Python
Python3实现Web网页图片下载
2016/01/28 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
如何使用Python进行OCR识别图片中的文字
2019/04/01 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
python计算n的阶乘的方法代码
2019/10/25 Python
美国户外烹饪产品购物网站:Outdoor Cooking
2020/01/10 全球购物
Python中pass语句的作用是什么
2016/06/01 面试题
计算机专业推荐信范文
2013/11/20 职场文书
人事文员岗位职责
2014/02/16 职场文书
作文批改评语大全
2014/04/23 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
庆国庆活动总结
2014/08/28 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
2016年九九重阳节活动总结
2016/04/01 职场文书