第十三节--对象串行化


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 相关文章推荐
基于文本的访客签到簿
Oct 09 PHP
php 静态变量与自定义常量的使用方法
Jan 26 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
Feb 06 PHP
php 模拟post_验证页面的返回状态(实例讲解)
Oct 28 PHP
浅谈php扩展imagick
Jun 02 PHP
PHP 快速排序算法详解
Nov 10 PHP
php去除头尾空格的2种方法
Mar 16 PHP
Symfony2 session用法实例分析
Feb 04 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
Aug 03 PHP
php curl发送请求实例方法
Aug 01 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
Oct 21 PHP
如何在PHP中读写文件
Sep 07 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中var_export与var_dump的区别分析
2010/08/21 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
Symfony页面的基本创建实例详解
2015/01/26 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
XHProf报告字段含义的解析
2016/05/17 PHP
PDO::inTransaction讲解
2019/01/28 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
javascript concat数组累加 示例
2009/09/03 Javascript
javascript dom 基本操作小结
2010/04/11 Javascript
无阻塞加载脚本分析[全]
2011/01/20 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
2014/06/30 Javascript
jquery trigger函数执行两次的解决方法
2016/02/29 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
AngularJs Forms详解及简单示例
2016/09/01 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
2018/12/21 Javascript
Vue2.x Todo之自定义指令实现自动聚焦的方法
2019/01/08 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
python实现socket端口重定向示例
2014/02/10 Python
python抓取最新博客内容并生成Rss
2015/05/17 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
公司业务员岗位职责
2014/03/18 职场文书
教师节演讲稿
2014/05/06 职场文书
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python
PHP获取学生成绩的方法
2021/11/17 PHP
apache ftpserver搭建ftp服务器
2022/05/20 Servers