考虑到可读性,数据往往不是以最有效的方式编写,但为了存储或传递数据时更加高效,同时不丢失其类型和结构,可以利用序列化和反序列化函数对数据进行处理。
序列化
将特定格式数据转换为可以恢复的字节串序列
什么时候进行序列化?
1)数据在网络上传输时
2)数据保存到文件中时
(由于序列化返回的是字符串,方便存储于任何地方!)
反序列化
顾名思义,将序列化得出的字符串恢复为原有格式数据的过程
什么时候进行反序列化?
1)程序读取数据的时候
序列化和反序列化的目的是在不影响数据有效性情况下,更高效地存储和传输数据,使程序更具维护性。
以前流行的序列化方式是生成XML字符串,目前几乎都是生成JSON格式字符串。除了一般数据的序列化外,很多语言都支持对object的序列化和反序列化。
PHP中的序列化与反序列化
函数:
serialize/unserialize
json_encode/json_decode
序列化
serialize函数
serialize函数是标准的序列化函数,会完整地序列化数据,其中可以修改一个子函数__sleep(),只序列化部分数据,忽略其他数据
__sleep():是一个钩子函数,默认序列化全部属性,可以修改至只序列化部分属性,没有序列化的属性会被忽略。
示例:
1.NULL
NULL被序列化为N!
2.boolean
boolean类型数据被序列化为b:
true序列化为b:1false序列化为b:0
3.integer
i:123 // 123的序列化
4.double
d:1.5
5.string
s:4:”test” // test序列化,4:字符串长度!
6.数组(array)
array(“tony”,”wenxin”)
a:2:{i:0;s:4:”tony”;i=1;s:6:”wenxin”;}// 解释
a:array2:数组元素个数0,1:数组的下标
序列化示例
<?php
class Person
{
var $name;
var $sex;
var $age;
function __construct($name = "", $sex = "", $age = "") {
$this->name = $name;
$