PHP对象序列化实例学习
2012-11-29 14:24
246 查看
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";
}
首先看对于对象本身的内容: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();
?>
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";
}
首先看对于对象本身的内容: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();
?>
相关文章推荐
- php学习笔记 类的声明与对象实例化
- php学习笔记 类的声明与对象实例化
- java学习笔记4:对象的初始化顺序(官方实例)
- php多层数组与对象的转换实例代码
- PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
- php面象对象数据库操作类实例
- php面象对象数据库操作类实例
- java 学习实例,实现空对象,和重写了,Comparator 的类实现了对于容器的比较!
- PHP入门学习笔记之—— PHP 类与对象 (中)
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [6] 版本升级接口开发
- 【嘉兴东臣php】面向对象学习周总结
- 一步一步学习PHP(5) 类和对象
- php类面向对象学习笔记
- php学习笔记(三)面向对象高级实践
- 【面向对象课程项目:纸牌】Java实例学习(一):优秀源码的分析
- php学习笔记十:类与对象-基础
- 认真学习php面向对象-3
- Objective-C 学习笔记 04 - 继承和对象的实例
- php面向对象学习(1)