快速业务通道

PHP串行化与JSON

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-25
在这个文件中用如下语句来创建一个哈希数组:

代码:
<?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

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号