在这个文件中用如下语句来创建一个哈希数组:
代码: <?php $animal = array ( "type" => "human", "name" => "hanguofeng", "age" => "20" ); ?> 为了测试这个数组的值,你可以使用print_r()函数来输出数组,输出的结果如下:
代码: Array ( [type] => human [name] => hanguofeng [age] => 20 ) 那么我们将他来串行化一下,串行化的代码如下:
代码: <?php $animal = array ( "type" => "human", "name" => "hanguofeng", "age" => "20" ); $animal_ser=serialize($animal); echo($animal_ser); ?> 这里我们将数组$animal串行化,将返回的串行化字符串保存在变量$animal_ser中,并输出,输出的结果是:
代码: a:3:{s:4:"type";s:5:"human";s:4:"name";s:10:"hanguofeng";s:3:"age";s:2:"20";} 我们来简单对这个字符串进行一个解析: a:3表示这是一个数组型的对象(a),他共有三个内置的对象(3) 大括号里面的部分是以逗号分割的对象表达式列表,以s:4:"type"为例,他表示一个字符串(s),长度为4位(4),值为“type”,即哈希数组的第一个元素的键。 后面的部分以此类推,我们不再赘述,你可以试试自己将各种对象串行化,看看串行化后的字符串是如何构建的。 下面来看数组的反串行化,即将我们上面生成的串行化字符串恢复为数组,代码如下:
代码: <?php $animal_ser=''a:3:{s:4:"type";s:5:"human";s:4:"name";s:10:"hanguofeng";s:3:"age";s:2:"20";}''; $animal = unserialize($animal_ser); print_r($animal); ?> 在第一行中,我们假设$animal_ser的值为上面获得的串行化字符串,在第二行将该字符串恢复为开始的数组,并赋值给$animal,最后输出$animal这个数组,此时的输出和本节开始时输出的原始数组是一样的,即:
代码: Array ( [type] => human [name] => hanguofeng [age] => 20 ) 这样我们就完成了数组的反串行化。
拓展知识—自定义对象的串行化和反串行化
对数组进行串行化是一个基础操作,然而在实际的程序设计中,我们可能经常对其他类型的变量进行串行化,例如对某个自定义对象进行串行化,这里有一个我们自己编写的类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一节的内容。
在JavaScript中串行化为JSON—使用json2.js
JavaScript中没有直接串行化对象的内置方法,当然你可以自己写一个,不过我还是强烈推荐你在这里偷个小懒,使用现成的组件,JSON的官方网站www.json.org提供了对JavaScript对象实现JSON串行化的代码库—js |