第十三节--对象串行化


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环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
Nov 17 PHP
php生成缩略图的类代码
Oct 02 PHP
php实现用户在线时间统计详解
Oct 08 PHP
PHP中数组合并的两种方法及区别介绍
Sep 14 PHP
深入PHP内存相关的功能特性详解
Jun 08 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
Sep 28 PHP
分享下页面关键字抓取components.arrow.com站点代码
Jan 30 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
Jul 01 PHP
ThinkPHP验证码和分页实例教程
Aug 22 PHP
php实现模拟登陆方正教务系统抓取课表
May 19 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
Jul 15 PHP
laravel 解决后端无法获取到前端Post过来的值问题
Oct 22 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入门小知识
2008/03/24 PHP
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
php pack与unpack 摸板字符字符含义
2009/10/29 PHP
利用curl 多线程 模拟 并发的详解
2013/06/14 PHP
thinkphp实现发送邮件密码找回功能实例
2014/12/01 PHP
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
js 跨域和ajax 跨域问题小结
2009/07/01 Javascript
JavaScript 函数调用规则
2009/09/14 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
JavaScript DOM节点添加示例
2014/07/16 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
jQuery Mobile框架中的表单组件基础使用教程
2016/05/17 Javascript
jQuery绑定自定义事件的魔法升级版
2016/06/30 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
2017/06/09 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
跟老齐学Python之集合(set)
2014/09/24 Python
PyTorch 1.0 正式版已经发布了
2018/12/13 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
python利用递归方法实现求集合的幂集
2020/09/07 Python
微软中国官方旗舰店:销售Surface、Xbox One、笔记本电脑、Office
2018/07/23 全球购物
Interrail法国:乘火车探索欧洲,最受欢迎的欧洲铁路通票
2019/08/27 全球购物
意大利香水和化妆品购物网站:Parfimo.it
2019/10/06 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
海飞丝广告词
2014/03/20 职场文书
学校运动会霸气口号
2014/06/07 职场文书
超市周年庆活动方案
2014/08/16 职场文书
群众路线表态发言材料
2014/10/17 职场文书
企业整改报告范文
2014/11/08 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
Win11如何启用启动修复 ? Win11执行启动修复的三种方法
2022/04/08 数码科技