我们大家有知道PHP串行化可以把变量包括对象,转化成连续bytes数据,你可以将串行化后的变量存在一个文件里或在网络上传输,然后再反串行化还原为原来的数据。文章这里就PHP串行化为大家详细的介绍。你在反串行化类的对象之前定义的类,PHP可以成功地存储其对象的属性和方法. 有时你可能需要一个对象在反串行化后立即执行。为了这样的目的,PHP会自动寻找__sleep和__wakeup方法。

当一个对象被PHP串行化,PHP会调用__sleep方法(如果存在的话). 在反串行化一个对象后,PHP 会调用__wakeup方法. 这两个方法都不接受参数. __sleep方法必须返回一个数组,包含需要串行化的属性. PHP会抛弃其它属性的值。如果没有__sleep方法,PHP将保存所有属性。
 
<?php
/*
*
* @Authors peng--jun
* @Email 1098325951@qq.com
* @Date 2016-01-23 14:40:38
* @Link http://www.cnblogs.com/xs-yqz/
* @version $Id$
==========================================
*/
header("Content-type: text/html; charset=UTF-8");
class Person{
private $name;
private $sex;
private $age; function __construct($name,$age,$sex){
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
function say(){
echo "我的名字:".$this->name."性别为: ".$this->sex."年龄为:".$this->age;
}    //在类中添加此方法,在串行化的时候自动调用并返回数组
function __sleep(){
$arr = array("name","age");//数组中的成员$name和$age将被串行化,成员$sex则将被忽略。
return($arr);//使用__sleep()方法的时候必须返回一个数组。
}
//在反串行化对象时自动调用该方法,没有参数也没有返回值
function __wakeup(){
$this->age = ;//在重新组织对象的时候,为新对象中的$age属性重新赋值
}
} $person1 = new Person("张三",,"男");
$person1_string = serialize($person1);
echo $person1_string."<br />"; //反串行化对象,并自动调用了__wakeup()方法重新为独享中的age赋值。
$person2 = unserialize($person1_string);
$person2->say(); ?>

输出的结果为:

O::"Person"::{s::"Personname";s::"张三";s::"Personage";i:;}
我的名字:张三性别为: 年龄为:

2.将串行化的字符串保存到文件中,从文件中读取字符串,反串性化实例。

 header("Content-type: text/html; charset=UTF-8");
class Person{
private $name;
private $sex;
private $age; function __construct($name,$age,$sex){
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
function say(){
echo "我的名字:".$this->name."性别为: ".$this->sex."年龄为:".$this->age;
}
} $person1 = new Person("张三",,"男");
$person1_string = serialize($person1);
file_put_contents("file.txt", $person1_string);
 header("Content-type: text/html; charset=UTF-8");
class Person{
private $name;
private $sex;
private $age; function __construct($name,$age,$sex){
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
function say(){
echo "我的名字:".$this->name." 性别为:".$this->sex." 年龄为:".$this->age;
}
} $person2_string = file_get_contents("file.txt");
$person2 = unserialize($person2_string);//反串性化重新形成对象$person2.
$person2->say();
?>

php中对象的串行化的更多相关文章

  1. Java 对象的串行化(Serialization)

    1.什么是串行化 对象的寿命通常随着生成该对象的程序的终止而终止.有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复.我们把对象的这种能记录自己的状态以便将来再生的能力.叫作对象的持续性(pe ...

  2. JavaEE 对象的串行化(Serialization)

    什么情况下需要序列化 a)当你想把的内存中的对象写入到硬盘的时候:b)当你想用套接字在网络上传送对象的时候:c)当你想通过RMI传输对象的时候:再稍微解释一下:a)比如说你的内存不够用了,那计算机就要 ...

  3. PHP面向对象04_串行化

    oop04复习 2014-9-3 10:48:45 要点: --1.克隆对象 --2.__toString( ) --3. __call( ) --4.自动加载类 --5.对象串行化 1.克隆对象以及 ...

  4. MFC如何生成一个可串行化的类

    一.MFC允许对象在程序运行的整个过程中持久化的串行化机制 (1)串行化是指向持久化存储媒介(如一个磁盘文件)读或写对象的过程. (2)串行化用于在程序运行过程时或之后修复结构化数据(如C++类或结构 ...

  5. VC++ MFC如何生成一个可串行化的类

    一.MFC允许对象在程序运行的整个过程中持久化的串行化机制(1)串行化是指向持久化存储媒介(如一个磁盘文件)读或写对象的过程.(2)串行化用于在程序运行过程时或之后修复结构化数据(如C++类或结构)的 ...

  6. Hadoop基础-Apache Avro串行化的与反串行化

    Hadoop基础-Apache Avro串行化的与反串行化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Apache Avro简介 1>.Apache Avro的来源 ...

  7. MFC【6】文件I/O和串行化

    文件输入和输出(I/O)服务是所有操作系统的主要工作.Microsoft Windows提供了各种API函数用来读.写和操作磁盘文件.MFC将这些桉树和CFile类融合在面对对象的模型里.其中CFil ...

  8. java的串行化

    参考博客:Java 对象的串行化(Serialization) 1,什么是串行化 对象的寿命通常随着生成该对象的程序的终止而终止.有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复.我们把对象 ...

  9. 关于ORACLE的串行化隔离级别--来自ORACLE概念手册

    为了描述同时执行的多个事务如何实现数据一致性,数据库研究人员定义了被 称为串行化处理(serializability)的事务隔离模型(transaction  isolation model).当所有 ...

随机推荐

  1. 基类方法的反隐藏 反private 秘籍

    class GoodStudent:private Mentor,private Student { public : using Mentor::GetInfo;   ///------------ ...

  2. git新手碰到的各种奇葩问题之一

    git  操作错误: <1>.情景描述:当在git commit --amend 更新上一次提交时,而此时提交日志会跳转到别人的日志中.,会出现错误:如下 弥补操作: 1.git fetc ...

  3. hdu 七夕节

    #include <cstdio> #include <cstring> #include <algorithm> #define maxn 500000 usin ...

  4. 为什么Linux不需要碎片整理?

    如果你是一个 Linux 用户,你可能会听说 Linux 的文件系统不需要碎片整理.你也可能会注意到 Linux 的发行版本也都没有磁盘碎片整理的功能.这是为什么呢? 要理解为什么 Linux 的文件 ...

  5. Js树型控件Dtree使用

    dtree地址:http://destroydrop.com/javascripts/tree/ Key features Unlimited number of levels 无限级 Can be ...

  6. BZOJ1108: [POI2007]天然气管道Gaz

    1108: [POI2007]天然气管道Gaz Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 410  Solved: 211[Submit][Sta ...

  7. Linux企业级项目实践之网络爬虫(14)——使用正则表达式抽取HTML正文和URL

    正则表达式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符 ...

  8. mysql 存储过程 计算报表

    把用例执行情况mysql表汇总起来 proc_write_report 汇总执行用例表中的测试数据 写入report 表,report表包括字段 report_id(自增)execution_flag ...

  9. HTML5新增的一些属性和功能之八——web Worker

    Web Workers 为什么用web workers? 浏览器的原理中决定了页面打开只有一个主线程--UI渲染线程,如果线程中有耗时的程序(js)会阻塞线程,使得页面中其他的UI无法渲染,我们一般把 ...

  10. Java反射举例

    本文參考:http://www.cnblogs.com/yydcdut/p/3845430.html 1.Java反射的基本介绍 Java的反射很强大,传递class. 能够动态的生成该类.取得这个类 ...