文档章节

PHP 对象的存储与传输(序列化 serialize 对象)

雪之丞
 雪之丞
发布于 2014/01/02 16:13
字数 857
阅读 488
收藏 6
点赞 0
评论 0

对象的存储与传输

在实际项目应用中,有些任务在一两个页面是无法完成的,由于变量到脚本执行完毕就释放,我们在本页所产生的对象想在其他页面使用时就碰到了麻烦。

如果需要将对象及其方法传递带我们想使用对象的页面比较简单可行的办法是将对象序列化后存储起来或直接传输给需要的页面;另一种办法是将对象注册为session变量。

序列化对象

1 什么是序列化? 对象序列化,就是将对象转换成可以存储的字节流。

2 何时需要对对象实现序列化? 当我们需要把一个对象在网络中传输时或者要把对象写人文件或者数据库时,就需要将对象进行序列化。

3 如何将对象序列化? 序列化完整过程包括两个步骤: 一、序列化,就是把对象转化为二进制的字符串,serialize()函数用于序列化一个对象; 二、反序列化,就是把对象被序列化转化的二进制字符串在转化为对象,unserialize()函数用来反序列化一个被序列化的对象。 这个过程下来,对象内的类型结果及数据都是完整的。

4 示例:

<!-- lang: php -->
<?php 
<!-- lang: php -->
class Person{
<!-- lang: php -->
	private $name;
<!-- lang: php -->
	private $age;
<!-- lang: php -->

<!-- lang: php -->
	function __construct($name, $age){
<!-- lang: php -->
		$this->name = $name;
<!-- lang: php -->
		$this->age = $age;
<!-- lang: php -->
	}
<!-- lang: php -->

<!-- lang: php -->
	function say(){
<!-- lang: php -->
		echo "My name is : ".$this->name."\n";
<!-- lang: php -->
		echo "My age is : ".$this->age."\n";
<!-- lang: php -->
	}
<!-- lang: php -->
}
<!-- lang: php -->

<!-- lang: php -->
$p1 = new Person("ZhangSan", 20);
<!-- lang: php -->
$p1_string = serialize($p1);
<!-- lang: php -->

<!-- lang: php -->
$fh = fopen("../file/p1.txt", "w");
<!-- lang: php -->
fwrite($fh, $p1_string);
<!-- lang: php -->
fclose($fh);
<!-- lang: php -->

<!-- lang: php -->
?>

通常不去直接解析上述序列化生成的字符。反序列化示例:
<!-- lang: php -->
<?php 
<!-- lang: php -->
class Person{
<!-- lang: php -->
	private $name;
<!-- lang: php -->
	private $age;
<!-- lang: php -->

<!-- lang: php -->
	function __construct($name, $age){
<!-- lang: php -->
		$this->name = $name;
<!-- lang: php -->
		$this->age = $age;
<!-- lang: php -->
	}
<!-- lang: php -->

<!-- lang: php -->
	function say(){
<!-- lang: php -->
		echo "My name is : ".$this->name."\n";
<!-- lang: php -->
		echo "My age is : ".$this->age."\n";
<!-- lang: php -->
	}
<!-- lang: php -->
}
<!-- lang: php -->

<!-- lang: php -->
$p2 = unserialize(file_get_contents("../file/p1.txt"));
<!-- lang: php -->
$p2->say();
<!-- lang: php -->

<!-- lang: php -->
?>

5 注意: (1)由于序列化对象不能序列化其方法,所以在unserialize的时候,当前文件必须包含对应的类或者require对应的类文件。 (2)序列化只能用于有限用户的情况下,因为需要为每个用户单独存储或写入文件,且保证文件名不重复。在用户不能正常退出浏览器的情况下,不能保证文件被删除。

对象注册为session变量

当用户量很多时,可以考虑session来保存对象。

1 示例:

<!-- lang: php -->
<?php 
<!-- lang: php -->
session_start();
<!-- lang: php -->
class Person{
<!-- lang: php -->
	private $name;
<!-- lang: php -->
	private $age;
<!-- lang: php -->

<!-- lang: php -->
	function __construct($name, $age){
<!-- lang: php -->
		$this->name = $name;
<!-- lang: php -->
		$this->age = $age;
<!-- lang: php -->
	}
<!-- lang: php -->

<!-- lang: php -->
	function say(){
<!-- lang: php -->
		echo "My name is : ".$this->name."\n";
<!-- lang: php -->
		echo "My age is :".$this->age."\n";
<!-- lang: php -->
	}
<!-- lang: php -->
}
<!-- lang: php -->

<!-- lang: php -->
$_SESSION['p1'] = new Person('ZhangSan', 20);
<!-- lang: php -->
$_SESSION['p1'] -> say();
<!-- lang: php -->
?>

2 注意

与序列化一样,注册对象session变量不能保存其方法,所以在读取session变量的时候,当前文件必须包含对应的类或者require对应的类文件。

本文转载自:http://www.5idev.com/p-php_object_serialize.shtml

共有 人打赏支持
雪之丞
粉丝 13
博文 219
码字总数 51065
作品 0
浦东
程序员
PHP 序列化变量的 4 种方法

序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。 1. s...

mickelfeng
2013/01/12
0
1
PHP多种序列化以及反序列化

PHP多种序列化以及反序列化 PHP点点通2016-09-2147 阅读 序列化PHP 序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个...

PHP点点通
2016/09/21
0
0
PHP多种序列化/反序列化的方法

序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。 1. s...

cnu2m
2012/11/08
0
0
php函数serialize()与unserialize()

php函数serialize()与unserialize()说明及案例。想要将已序列化的字符串变回 PHP 的值,可使用unserialize()。serialize()可处理除了resource之外的任何类型。甚至可以serialize()那些包含了...

晨曦之光
2012/03/09
75
0
php的serialize和unserialize的用法

serialize -- 产生一个可存储的值的表示 描述 string serialize ( mixed value ) serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。 这有利于存储或传递 PH...

freedonn
2014/04/02
0
0
php函数 serialize()和unserialize()

php函数:序列化函数——serialize()与反序列化函数——unserialize()说明及案例。 serialize()返回字符串,此字符串包含了表示value的字节流,可以存储于任何地方。这有利于存储或传递 PHP ...

Claire_level
2012/06/09
0
1
序列化介绍

什么是序列化 程序员在编写应用程序的时候往往需要将程序的某些数据存储在内存中,然后将其写入某个文件或是将它传输到网络中的另一台计算机上以实现通讯。这个将程序数据转化成能被存储并传...

botkenni
2016/10/08
35
0
对象序列化学习笔记

需要掌握的函数 unserialize serialize 对象序列化的好处? 由于php对象是用数组来模拟的,因此我们把对象转为数组,就能看到这个对象所拥有的属性了。 class a{ private $name; private $a...

晨武
2016/08/05
30
0
php的serialize序列化和json性能测试

最近需要对大数组做存储,需要在serialize序列化和json之间做了选择。因此需要做了性能测试。 在php5.2之前对数组存储的时候,大都使用serialize系列化。php5.2之后,开始内置了 JSON 的支持...

BearCatYN
2015/01/12
0
0
基于Json序列化和反序列化通用的封装

1. 最近项目已经上线了 ,闲暇了几天 想将JSON的序列化以及反序列化进行重新的封装一下本人定义为JSONHelp,虽然Microsoft 已经做的很好了。但是我想封装一套为自己开发的项目使用。方便后期...

zsdnr
2017/07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

AngularJs $resource 高大上的数据交互

$resource 创建一个resource对象的工厂函数,可以让你安全的和RESFUL服务端进行数据交互。 需要注入 ngResource 模块。angular-resource[.min].js 默认情况下,末尾斜杠(可以引起后端服务器...

孟飞阳
11分钟前
0
0
打印斐波那契数

package com.jerry.ch04;public class PrintFibonacci {public static void main(String[] args) {for (int i=0; i<10; i++) {System.out.print(fib(i) + " ");}......

JerryNing
16分钟前
0
0
shell编程

一、shell脚本介绍

人在艹木中
17分钟前
0
0
istio 0.8 遥测 案例

==============遥测===================================== 演示如何从网格中收集遥测信息。 分布式跟踪。如何配置代理以向Zipkin或Jaeger发送跟踪请求 收集度量标准和日志。此任务说明如何配...

xiaomin0322
19分钟前
0
0
ND4J求多元线性回归以及GPU和CPU计算性能对比

上一篇博客《梯度下降法求多元线性回归及Java实现》简单了介绍了梯度下降法,并用Java实现了一个梯度下降法求回归的例子。本篇博客,尝试用dl4j的张量运算库nd4j来实现梯度下降法求多元线性回...

冷血狂魔
20分钟前
0
0
springboot常用注解

@SpringBootApplication: 包含@Configuration、@EnableAutoConfiguration、@ComponentScan 通常用在主类上。 @Service: 用于标注业务层组件。 @RestController: 用于标注控制层组件(如strut...

GoldenVein
26分钟前
1
0
如何进行大数据的入门级学习?

不知道你是计算机专业应届生还是已经从业者。总之,有java基础的学生学习大数据会轻松很多,零基础的小白都需要从java和linux学起。 如果你是一个学习能力特别强,而且自律性也很强的人的话可...

董黎明
40分钟前
0
0
使用Parcelable传递复杂参数

最近做AIDL传递对象,对象必须实现Parcelable的方法才可以被传递。 @Override    public int describeContents() {//这个 默认返回0就行了。        return 0;    }    ...

火云
41分钟前
0
0
十大Intellij IDEA快捷键

Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论。每个人都有自己的最爱,想排出个理想的榜单还真是困难。以前也整理过Intellij的快捷键,这次就按照我日常开发...

HJCui
51分钟前
0
0
word 使用mathtype 编写 数学公式

下载安装,这个链接命名。。。。 http://www.mathtype.cn/xiazai.html 安装之后会多出一个选项 使用内联方式插入图表 编写公式的界面 设置支持latex 语法 输入公式回车就可以看到结果...

阿豪boy
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部