PHP对象的存储与传输
2015-03-26 10:21
309 查看
为什么要进行对象存储和传输?
一两个页面很多时候无法完成特定的功能,但是变量在脚本执行结束后自动释放了,我们在其他页面使用当前页面创建的对象时就遇到了难题。
为了传递对象以及对象的属性和方法到其他页面,我们就需要使用对象序列化将对象存储或传输。或者,使用将对象注册为session变量。
什么是序列化对象呢?
对象序列化,就是将对象转换成可以存储的字节流。当我们需要把一个对象在网络中传输时或者要把对象写入文件或是数据库时,就需要将对象进行序列化。
序列化对象的过程是怎么样的?
两个步骤:
首先,序列化,就是把对象转化为二进制的字符串,serialize() 函数用于序列化一个对象。
然后,反序列化,就是把对象被序列转化的二进制字符串再转化为对象,unserialize() 函数来反序列化一个被序列化的对象。这样整个过程下来,对象内的类型结构及数据都是完整的。
语法:
序列化的例子:
打开 p1.text 文件,里面写入的内容如下:
O:6:”Person”:2:{s:12:” Person name”;s:4:”张三”;s:11:” Person age”;i:20;}
通常不去直接解析上述序列号生产的字符
反序列化
输出结果:
我的名字叫:张三
我的年龄是:20
PS:
1.由于序列化对象不能序列化其方法,所以在 unserialize 的时候,当前文件必须包含对应的类或者 require 对应的类文件。
2.序列化只能用于有限用户的情况下,因为需要为每个用户单独存储或写入文件,且保证文件名不能重复。在用户不能正常退出浏览器的情况下,不能保证文件被删除。
对象注册为session变量的例子
当用户数量很多时,可以考虑用 session 来保存对象。关于 session 的更多信息,请参见《PHP Session》。
读取session
输出结果:
我的名字叫:张三
我的年龄是:20
PS:
与序列化一样,注册对象为 session 变量时并不能保存其方法,所以在读取 session 变量的时候,当前文件必须包含对应的类或者 require 对应的类文件。
一两个页面很多时候无法完成特定的功能,但是变量在脚本执行结束后自动释放了,我们在其他页面使用当前页面创建的对象时就遇到了难题。
为了传递对象以及对象的属性和方法到其他页面,我们就需要使用对象序列化将对象存储或传输。或者,使用将对象注册为session变量。
什么是序列化对象呢?
对象序列化,就是将对象转换成可以存储的字节流。当我们需要把一个对象在网络中传输时或者要把对象写入文件或是数据库时,就需要将对象进行序列化。
序列化对象的过程是怎么样的?
两个步骤:
首先,序列化,就是把对象转化为二进制的字符串,serialize() 函数用于序列化一个对象。
然后,反序列化,就是把对象被序列转化的二进制字符串再转化为对象,unserialize() 函数来反序列化一个被序列化的对象。这样整个过程下来,对象内的类型结构及数据都是完整的。
语法:
string serialize( mixed value ) mixed unserialize( string str [, string callback] )
序列化的例子:
<?php class Person { private $name; private $age; function __construct($name, $age) { $this->name = $name; $this->age = $age; } function say() { echo "我的名字叫:".$this->name."<br />"; echo " 我的年龄是:".$this->age; } } $p1 = new Person("张三", 20); $p1_string = serialize($p1); //将对象序列化后写入文件 $fh = fopen("p1.text", "w"); fwrite($fh, $p1_string); fclose($fh); ?>
打开 p1.text 文件,里面写入的内容如下:
O:6:”Person”:2:{s:12:” Person name”;s:4:”张三”;s:11:” Person age”;i:20;}
通常不去直接解析上述序列号生产的字符
反序列化
<?php class Person { private $name; private $age; function __construct($name, $age) { $this->name = $name; $this->age = $age; } function say() { echo "我的名字叫:".$this->name."<br />"; echo " 我的年龄是:".$this->age; } } $p2 = unserialize(file_get_contents("p1.text")); $p2 -> say(); ?>
输出结果:
我的名字叫:张三
我的年龄是:20
PS:
1.由于序列化对象不能序列化其方法,所以在 unserialize 的时候,当前文件必须包含对应的类或者 require 对应的类文件。
2.序列化只能用于有限用户的情况下,因为需要为每个用户单独存储或写入文件,且保证文件名不能重复。在用户不能正常退出浏览器的情况下,不能保证文件被删除。
对象注册为session变量的例子
当用户数量很多时,可以考虑用 session 来保存对象。关于 session 的更多信息,请参见《PHP Session》。
<?php session_start(); class Person { private $name; private $age; function __construct($name, $age) { $this->name = $name; $this->age = $age; } function say() { echo "我的名字叫:".$this->name."<br />"; echo " 我的年龄是:".$this->age; } } $_SESSION["p1"] = new Person("张三", 20); ?>
读取session
<?php session_start(); class Person { private $name; private $age; function __construct($name, $age) { $this->name = $name; $this->age = $age; } function say() { echo "我的名字叫:".$this->name."<br />"; echo " 我的年龄是:".$this->age; } } $_SESSION["p1"] -> say(); ?>
输出结果:
我的名字叫:张三
我的年龄是:20
PS:
与序列化一样,注册对象为 session 变量时并不能保存其方法,所以在读取 session 变量的时候,当前文件必须包含对应的类或者 require 对应的类文件。
相关文章推荐
- PHP 对象的存储与传输(序列化 serialize 对象)
- PHP 对象的存储与传输(序列化 serialize 对象)
- PHP 对象的存储与传输(序列化 serialize 对象)
- PHP 对象的存储与传输(序列化 serialize 对象)
- PHP 对象的存储与传输(序列化 serialize 对象)
- PHP 对象的存储与传输(序列化 serialize 对象)
- Memcached中Perl序列化存储的对象PHP无法读取的解决
- C#中序列化存储和传输及反序列化对象
- Memcached中Perl序列化存储的对象PHP无法读取的解决
- 使用 minio 搭建私有对象存储云。aws-php-sdk 操作object
- php laravel 阿里云对象存储 多图上传 前端手机端页面遍历输出
- php HTTPSQS 传输对象处理
- php memcache 对象序列化,存储对象的方法
- Yii 中session存储对象 网页无法调用此session __PHP_Incomplete_Class
- 把一个类对象存储到session 的时候报错 __PHP_Incomplete_Class_Name 的解决办法
- Memcached中Perl序列化存储的对象PHP无法读取的解决
- 什么是序列化?一句话:就是将java对象固化成文件存起来,这样就java对象就被固话了,可以任意的存储和网络传输了,而java对象是暂时存在内存里的,是没办法传输的,因为是虚拟的,并不是实实在在的文件
- mysql数据库存储PHP数组、对象的方法
- php对象的序列化(串行化)用作 写入文件或者网络传输
- PHP对象编程实现3D饼图