PHP串行化与JSON

2008-06-19 02:36:52  来源:baidu.com 

WebjxCom提示:串行化即将变量转换成字节流的过程。



拓展知识—自定义对象的串行化和反串行化

对数组进行串行化是一个基础操作,然而在实际的程序设计中,我们可能经常对其他类型的变量进行串行化,例如对某个自定义对象进行串行化,这里有一个我们自己编写的类A(保存在classa.inc中):

代码:
<?php
class A {
var $one = 1;
function show_one() {
   echo $this->one;
}
}
?>
我们在如下代码中创建类的实例并对该实例进行串行化:
代码:
<?php
include("classa.inc");
$a=new A;
echo(serialize($a));
?>
此时输出的内容为:
代码:
O:1:"A":1:{s:3:"one";i:1;}
总体来看,这个串行化字符串输出了改对象当前的状态,即i的值为1。下面我们来逐个分析其中的细节。
O:1:由于当前的变量是一个自定义对象,因此该表征字符为“O”,表示Object。
后面的"A"标识了该变量是哪个类的实例,这里即A类。
大括号内即该实例的各个属性的名称和值。
而后我们将其进行反串行化:
代码:
<?php
include("classa.inc");
$s = 'O:1:"A":1:{s:3:"one";i:1;}';
$a = unserialize($s);
$a->show_one();
?>

此时输出“1”,即调用了A类的show_one()方法。
你可以注意到虽然在实例的串行化字符串中并没有包含类的方法,但是我们将其反串行化后,仍然可以调用类的方法,这个特性在PHP4及以上版本中被支持(当然,你需要包含类的定义文件classa.inc)。
注:你可以参考PHP手册中Language Reference->Classes and Objects->Serializing objects - objects in sessions一节的内容。

文章评论

共有 0 位网友发表了评论 查看完整内容