第十三节--对象串行化


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 相关文章推荐
BBS(php &amp; mysql)完整版(三)
Oct 09 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
Oct 19 PHP
PHP header()函数使用详细(301、404等错误设置)
Apr 17 PHP
php实现的用户查询类实例
Jun 18 PHP
php 利用socket发送HTTP请求(GET,POST)
Aug 24 PHP
thinkPHP3.2简单实现文件上传的方法
May 16 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
Feb 14 PHP
php中bind_param()函数用法分析
Mar 28 PHP
PHP数组遍历的几种常见方式总结
Feb 15 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
Jul 09 PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 PHP
PHP设计模式入门之状态模式原理与实现方法分析
Apr 26 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将数据导入到Foxmail
2006/10/09 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
Jquery中find与each方法用法实例
2015/02/04 Javascript
javascript使用avalon绑定实现checkbox全选
2015/05/06 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
深入理解js generator数据类型
2016/08/16 Javascript
Angular项目中$scope.$apply()方法的使用详解
2017/07/26 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
js实现三角形粒子运动
2020/09/22 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
用Python进行行为驱动开发的入门教程
2015/04/23 Python
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
Python使用requests发送POST请求实例代码
2018/01/25 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
2020/06/01 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
学校卫生检查制度
2014/02/03 职场文书
尊老爱幼演讲稿
2014/09/04 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
小学英语复习计划
2015/01/19 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书