本文标签:PHP对象序列化
PHP还是比较常用的,于是我研究了一下PHP对象序列化,在这里拿出来和大家分享一下,希望对大家有用 。PHP对象序列化也是一个比较普遍的功能,能够把一个对象进行串行化以后变成一个字符串,能够保存或者传输 。我们先看一个例子: - classTestClass
- {
- var$a;
- var$b;
-
- functionTestClass()
- {
- $this->a="Thisisa";
$this->b="Thisisb"; } functiongetA() { return$this->a; } functiongetB() { return$this->b; } } $obj=newTestClass; $str=serialize($obj); echo$str;
输出结果: - O:9:"TestClass":2:{s:1:"a";s:9:"Thisisa";s:1:"b";s:9:"Thisisb";}
我们来分析一个对象串行化之后的字符串 。 - O:9:"TestClass":2:
- {
- s:1:"a";s:9:"Thisisa";
- s:1:"b";s:9:"Thisisb";
- }
- 经验总结PHP应用技巧
- 经验之谈PHP表单重复提交问题解决方案
- 关于Apache 2.0和PHP5.0安装详解
- 高手指南PHP安装配置
- 主流Apache 2 PHP5安装使用介绍
首先看对于对象本身的内容:O:9:"TestClass":2:O是说明这是一个对象类型(object),然后9是代表对象的名字查过浓度,2是代表该对象有几个属性 。在看两个属性的内容:s:1:"a";s:9:"Thisisa";其实跟数组的内容比较类似,第一项:s:1:"a";是描述属性名称的,第二项s:9:"Thisisa";是描述属性值的 。后面的属性类似 。先说一种PHP对象序列化的应用,下面的内容是PHP手册上,没有更改原文 。serialize()返回一个字符串,包含着可以储存于PHP的任何值的字节流表示 。unserialize()可以用此字符串来重建原始的变量值 。用序列化来保存对象可以保存对象中的所有变量 。对象中的函数不会被保存,只有类的名称 。
要能够unserialize()一个对象,需要定义该对象的类 。也就是,如果序列化了page1.php中类A的对象$a,将得到一个指向类A的字符串并包含有所有$a中变量的值 。如果要在page2.php中将其解序列化,重建类A的对象$a,则page2.php中必须要出现类A的定义 。这可以例如这样实现,将类A的定义放在一个包含文件中,并在page1.php和page2.php都包含此文件 。 - php
- //classa.inc:
- classA
- {
- var$one=1;
-
- functionshow_one()
- {
- echo$this->one;
- }
- }
-
- //page1.php:
- include("classa.inc");
-
- $a=newA;
- $s=serialize($a);
- //将$s存放在某处使page2.php能够找到
- $fp=fopen("store","w");
- fputs($fp,$s);
- fclose($fp);
-
- //page2.php:
- //为了正常解序列化需要这一行
- include("classa.inc");
-
- $s=implode("",@file("store"));
- $a=unserialize($s);
-
- //现在可以用$a对象的show_one()函数了
- $a->show_one();
- ?>
|