第十三节--对象串行化


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 array操作10个小技巧分享
Jun 23 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
Jun 09 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
Jan 07 PHP
PHP连接SQLServer2005的方法
Jan 27 PHP
php备份数据库类分享
Apr 14 PHP
PHP IDE phpstorm 常用快捷键
May 18 PHP
php使用curl通过代理获取数据的实现方法
May 16 PHP
php gd等比例缩放压缩图片函数
Jun 12 PHP
详谈php中 strtr 和 str_replace 的效率问题
May 14 PHP
详解PHP素材图片上传、下载功能
Apr 12 PHP
php实例化一个类的具体方法
Sep 19 PHP
PHP 枚举类型的管理与设计知识点总结
Feb 13 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
php 错误处理经验分享
2011/10/11 PHP
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
2016/08/26 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
使用Python解析JSON数据的基本方法
2015/10/15 Python
Python格式化输出%s和%d
2018/05/07 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
python try except 捕获所有异常的实例
2018/10/18 Python
对python 匹配字符串开头和结尾的方法详解
2018/10/27 Python
Python单元测试与测试用例简析
2019/11/09 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
PHP如何与mysql建立链接
2013/05/05 面试题
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
英文道歉信
2015/01/20 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL