第十三节--对象串行化


Posted in PHP onNovember 16, 2006

/*
+-------------------------------------------------------------------------------+
| = 本文为Haohappy读<<Core PHP Programming>> 
| = 中Classes and Objects一章的笔记 
| = 翻译为主+个人心得 
| = 为避免可能发生的不必要的麻烦请勿转载,谢谢 
| = 欢迎批评指正,希望和所有PHP爱好者共同进步! 
| = PHP5研究中心: http://blog.csdn.net/haohappy2004
+-------------------------------------------------------------------------------+
*/
第十三节--对象串行化
串行化可以把变量包括对象,转化成连续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验证码(支持中文)
Feb 14 PHP
使用PHP获取网络文件的实现代码
Jan 01 PHP
PHP中对于浮点型的数据需要用不同的方法解决
Mar 11 PHP
php cli换行示例
Apr 22 PHP
PHP两种去掉数组重复值的方法比较
Jun 19 PHP
PHP中预定义的6种接口介绍
May 12 PHP
Codeigniter控制器controller继承问题实例分析
Jan 19 PHP
PHP的邮件群发系统phplist配置方法详细总结
Mar 30 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
Jun 13 PHP
PHP面向对象程序设计之对象生成方法详解
Dec 02 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
May 11 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 PHP
第十二节--类的自动加载
Nov 16 #PHP
第十一节--重载
Nov 16 #PHP
第十节--抽象方法和抽象类
Nov 16 #PHP
第九节--绑定
Nov 16 #PHP
第八节--访问方式
Nov 16 #PHP
第七节--类的静态成员
Nov 16 #PHP
第六节--访问属性和方法
Nov 16 #PHP
You might like
Zerg剧情介绍
2020/03/14 星际争霸
10个简化PHP开发的工具
2014/12/25 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
php伪静态验证码不显示的解决方案
2019/09/26 PHP
TP5框架请求响应参数实例分析
2019/10/17 PHP
如何让页面加载完成后执行js
2013/06/26 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
js计算任意值之间随机数的方法
2015/01/16 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
vue实现简单loading进度条
2018/06/06 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
Python的math模块中的常用数学函数整理
2016/02/04 Python
Python之日期与时间处理模块(date和datetime)
2017/02/16 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
2019/08/10 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
Python使用ElementTree美化XML格式的操作
2020/03/06 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
司机的工作范围及职责
2013/11/13 职场文书
婚礼新郎父母答谢词
2014/01/16 职场文书
财务部经理岗位职责
2014/02/03 职场文书
数控技术专业毕业自荐书范文
2014/02/05 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
公安机关起诉意见书
2015/05/20 职场文书
开学典礼致辞
2015/07/29 职场文书
实习报告怎么写
2019/06/20 职场文书
python 实现定时任务的四种方式
2021/04/01 Python