前言

序列化的过程是对象状态转换为可传送的格式。序列化反对序列化,将流为对象,结合这两个过程,数据可以存储和传输容易。

将一个对象的状态信息转换为可以存储或传输的形式的过程。在序列化对象将其当前状态写入到临时或持久性存储区。后来,对象可以重新创建,通过阅读或反序列化对象的状态从存储区。

在一般情况下,对象实例的所有字段都会被序列化,这意味着将数据表示为序列化数据的实例,代码可以解释格式可能能够确定数据的值,而不依赖于该成员的可访问性。同样的,反序列化提取数据的序列化表示直接设置对象的状态,这是独立的访问规则,可能包含重要的安全数据的任何对象,它不应该被序列化,如果可能的话,如果它必须是可序列化的,要产生一个特定的字段保存不可序列化的重要数据。如果这不能可以实现,应该指出的是,数据将暴露To具有序列化权限的任何代码,并且不允许任何恶意代码获得该权限。

序列化和序列化功能



这两个函数是PHP中序列化和序列化数据的常用函数,有利于保存或传递PHP的值,而不会丢失PHP的类型和结构。


< PHP

美元=阵列(A = 'apple,B = C = 'coconut 'banana ',');

序列化数组
$ 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)
{
返回base64_encode(gzcompress(连载($ obj)));
}

/ /反序列化
功能my_unserialize($ TXT)
{
返回序列化(gzuncompress(base64_decode($ TXT)));
}


json_encode和json_decode



使用JSON格式化序列化和反序列化是一个不错的选择:

它是用json_encode和json_decode格式输出序列化和序列化格式快得多。

(1)JSON格式可读性强。

(2)JSON格式小于结果连载。

(3)JSON格式是开放的、可移植的,它也可以用在其他语言中。


美元=阵列(A = 'apple,B = C = 'coconut 'banana ',');

序列化数组
S = json_encode美元(美元);
回声$;
输出::苹果

回声';

/ /反序列化
O = json_decode美元(美元的);


在上面的例子中,输出的json_encode长度明显短于序列化输出长度在前面的例子中,需要注意的是,json_encode无法序列化对象的重要。

总结

这是本文的全部内容,希望您能喜欢并帮助您。如果有问题,您可以留言。