第十三节--对象串行化


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读取目录下所有文件的代码
Jan 07 PHP
php学习笔记之 函数声明(二)
Jun 09 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
Sep 23 PHP
php FLEA中二叉树数组的遍历输出
Sep 26 PHP
PHP处理JSON字符串key缺少双引号的解决方法
Sep 16 PHP
PHP获取当前页面URL函数实例
Oct 22 PHP
php实现通过ftp上传文件
Jun 19 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
Sep 30 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
Mar 04 PHP
php实现简单的权限管理的示例代码
Aug 25 PHP
PHP实现类似题库抽题效果
Aug 16 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
Apr 23 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绘图之在图片上写中文和英文的方法
2015/01/24 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
js计数器代码
2006/11/04 Javascript
JQuery datepicker 使用方法
2011/05/20 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
javascript实现数独解法
2015/03/14 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
vuex的简单使用教程
2018/02/02 Javascript
自己动手封装一个React Native多级联动
2018/09/19 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
2019/03/28 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
Python实现全角半角字符互转的方法
2016/11/28 Python
python提取包含关键字的整行数据方法
2018/12/11 Python
django2.0扩展用户字段示例
2019/02/13 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
Python Django Cookie 简单用法解析
2019/08/13 Python
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
高三自我鉴定范文
2013/10/19 职场文书
优秀毕业生推荐信
2013/11/02 职场文书
家佳咖啡店创业计划书
2013/12/27 职场文书
咖啡厅创业计划书范本
2014/01/22 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
中华魂演讲稿
2014/05/13 职场文书
个性婚礼策划方案
2014/05/17 职场文书
建筑管理专业求职信
2014/07/28 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
护林员个人总结
2015/03/04 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python
vue封装数字翻牌器
2022/04/20 Vue.js