php对象的串行化函数,php面向对象全攻略(十六)对象的串行化_PHP教程

把对象串行化

有时候需要把一个对象在网络上传输,为了方便传输,可以把整个对象转化为二进制串,

等到达另一端时,再还原为原来的对象,这个过程称之为串行化,就像我们现在想把一辆汽

车通过轮船运到美国去,因为汽车的体积比较大,我们可以把汽车拆开成小的部件,然后我们把这些部件通过轮般运到美国去,到了美国再把这些部件组装回汽车。

有两种情况我们必须把对象串行化,第一种情况就是把一个对象在网络中传输的时候要

将对象串行化,第二种情况就是把对象写入文件或是数据库的时候用到串行化。

串行化有两个过程,一个是串行化,就是把对象转化为二进制的字符串,我们使用

serialize()函数来串行化一个对象,另一个是反串行化,就是把对象转化的二进制字符串再转

化为对象, 我们使用unserialize()函数来反串行化一个对象。

PHP 中serialize()函数的参数为对象名,返回值为一个字符串,Serialize()返回的字符串

含义模糊,一般我们不会解析这个串来得到对象的信息,我们只要把返回来的这个字符串传

到网络另一端或是保存到方件中即可。

PHP 中unserialize()函数来反串行化对象,这个函数的参数即为serialize()函数的返回值,

输出当然是重新组织好的对象。代码片段

代码如下:class Person{

//下面是人的成员属性

var $name; //人的名子

var $sex; //人的性别

var $age; //人的年龄

//定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值

function __construct($name="", $sex="", $age=""){

$this->name=$name;

$this->sex=$sex;

$this->age=$age;

}

//这个人可以说话的方法, 说出自己的属性

function say() {

echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."

";

}

}

$p1=new Person("张三", "男", 20);

$p1_string=serialize($p1); //把一个对象串行化,返一个字符串

echo $p1_string."

"; //串行化的字符串我们通常不去解析

$p2=unserialize($p1_string); //把一个串行化的字符串反串行化形成对象$p2

$p2->say();

?>

上例输出结果:

代码片段

O:6:"Person":3:{s:4:"name";s:4:"张三";s:3:"sex";s:2:"男";s:3:"age";i:20;}

我的名子叫:张三性别:男我的年龄是:20

在php5 中有两个魔术方法__sleep()方法和__wakeup()方法,在对象串行化的时候,会调用

一个__sleep()方法来完成一些睡前的事情;而在重新醒来,即由二进制串重新组成一个对象

的时候,则会自动调用PHP 的另一个函数__wakeup(),做一些对象醒来就要做的动作。

__sleep()函数不接受任何参数,但返回一个数组,其中包含需要串行化的属性。末被包

含的属性将在串行化时被忽略,如果没有__sleep()方法,PHP 将保存所有属性。

代码片段

代码如下:class Person{

//下面是人的成员属性

var $name; //人的名子

var $sex; //人的性别

var $age; //人的年龄

//定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值

function __construct($name="", $sex="", $age=""){

$this->name=$name;

$this->sex=$sex;

$this->age=$age;

}

//这个人可以说话的方法, 说出自己的属性function say()

{

echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."

";

}

//指定串行化时把返回的数组中$name和$age值串行化,忽略没在数组中的属性$sex

function __sleep() {

$arr=array("name", "age");

return($arr);

}

//重新生成对象时,并重新赋值$age为40

function __wakeup() {

$this->age = 40;

}

}

$p1=new Person("张三", "男", 20);

//把一个对象串行化,返一个字符串,调用了__sleep()方法,忽略没在数组中的属性$sex

$p1_string=serialize($p1);

echo $p1_string."

"; //串行化的字符串我们通常不去解析

$p2=unserialize($p1_string); //反串行化形成对象$p2重新赋值$age为40

$p2->say();

?>

上例输出值为:

执行结果

O:6:"Person":2:{s:4:"name";s:4:"张三";s:3:"age";i:20;}

我的名子叫:张三性别:我的年龄是:40

http://www.bkjia.com/PHPjc/320618.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/320618.htmlTechArticle把对象串行化 有时候需要把一个对象在网络上传输,为了方便传输,可以把整个对象转化为二进制串, 等到达另一端时,再还原为原来的对...

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:php中文网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值