序列化是将变量转换为保存或传输字符串的过程,反序列化是在适当的时间将字符串转换为原始变量,结合这两个过程,可以方便地存储和传输数据,从而使程序更易于维护。
1。序列化和序列化功能
这两个函数是PHP中序列化和序列化数据的常用函数。
复制代码代码如下所示:
< PHP
美元=阵列(A = > 'apple,B = > 'banana,C> 'coconut);
序列化数组
$ S =连载(美元);
回声$;
输出结果:A:3:{ 1:A;S:5:苹果S:1;B;s:6:香蕉s:1;;C;;s:7:;;}
回声';
/ /反序列化
$ O =序列化(美元的);
print_r($ O);
输出阵列({苹果>
>

当数组包含如双引号,单引号字符,或结肠的数字,他们被反序列化并可能有问题。为了解决这个问题,一个聪明的诀窍是使用base64_encode和base64_decode。
复制代码代码如下所示:
$ obj =阵();
序列化
$ S = base64_encode(连载($ obj));
/ /反序列化
原=序列化(base64_decode美元(美元的));
但是base64编码会增加字符串的长度。为了解决这个问题,它可以用来与gzcompress。
/ /定义用于序列化对象的功能
功能my_serialize($ obj)
{
returnbase64_encode(gzcompress(连载($ obj)));
}
/ /反序列化
功能my_unserialize($ TXT)
{
returnunserialize(gzuncompress(base64_decode($ TXT)));
}

2。json_encode和json_decode
使用JSON格式化序列化和反序列化是一个不错的选择:
它是用json_encode和json_decode格式输出序列化和序列化格式快得多。
JSON格式可读性强。
JSON格式小于结果连载。
JSON格式是开放的、可移植的,也可以在其他语言中使用。
复制代码代码如下所示:
美元=阵列(A = > 'apple,B = > 'banana,C> 'coconut);

序列化数组
S = json_encode美元(美元);
回声$;
输出::苹果
回声';
/ /反序列化
O = json_decode美元(美元的);

在上面的例子中,输出的json_encode长度明显短于序列化输出长度在前一个例子。
三.var_export和评价
的var_export函数输出变量为字符串;eval执行字符串作为PHP代码,和原变量的内容序列化。
复制代码代码如下所示:
美元=阵列(A = > 'apple,B = > 'banana,C> 'coconut);

序列化数组
S = var_export美元($,真的);
回声$;
输出/结果:阵列(A = 'apple,B = C = 'coconut 'banana ',')
回声';
/ /反序列化
eval($ my_var =。S;
print_r($ my_var);

4。wddx_serialize_value和WDDX反序列化
的wddx_serialize_value功能可以序列化数组变量和一个XML字符串的形式输出。
复制代码代码如下所示:
美元=阵列(A = > 'apple,B = > 'banana,C> 'coconut);

序列化数组
S = wddx_serialize_value美元(美元);
回声$;
输出(见输出字符串/来源:applebananacoconut)
回声';
/ /反序列化
O = wddx_deserialize美元(美元的);
print_r($ O);
输出结果:数组(1)

正如您所看到的,XML标记的字符较多,这使得这种格式的序列化仍然占用大量空间。
总结
以上所有功能都可以正常执行时,数组变量是连续的,但将其应用于对象。例如,在json_encode序列化的对象会失败。当对象是被反序列化,序列化和评估将有不同的影响。