3.NULL 和标量类型的序列化
NULL 和标量类型的序列化是最简单的,也是构成符合类型序列化的基础。这部分内容相信许多 PHP 开发者都已经熟知。如果您感觉已经掌握了这部分内容,可以直接跳过这一章。
3.1.NULL 的序列化
在 PHP 中,NULL 被序列化为:
N; |
3.2.boolean 型数据的序列化
boolean 型数据被序列化为:
b:<digit>; |
其中 <digit> 为 0 或 1,当 boolean 型数据为 false 时,<digit> 为 0,否则为 1。
3.3.integer 型数据的序列化
integer 型数据(整数)被序列化为:
i:<number>; |
其中 <number> 为一个整型数,范围为:-2147483648 到 2147483647。数字前可以有正负号,如果被序列化的数字超过这个范围,则会被序列化为浮点数类型而不是整型。如果序列化后的数字超过这个范围(PHP 本身序列化时不会发生这个问题),则反序列化时,将不会返回期望的数值。
3.4.double 型数据的序列化
double 型数据(浮点数)被序列化为:
d:<number>; |
其中 <number> 为一个浮点数,其范围与 PHP 中浮点数的范围一样。可以表示成整数形式、浮点数形式和科学技术法形式。如果序列化无穷大数,则 <number> 为 INF,如果序列化负无穷大,则 <number> 为 -INF。序列化后的数字范围超过 PHP 能表示的最大值,则反序列化时返回无穷大(INF),如果序列化后的数字范围超过 PHP 所能表示的最小精度,则反序列化时返回 0。
3.5.string 型数据的序列化
string 型数据(字符串)被序列化为:
s:<length>:"<value>"; |
其中 <length> 是 <value> 的长度,<length> 是非负整数,数字前可以带有正号(+)。<value> 为字符串值,这里的每个字符都是单字节字符,其范围与 ASCII 码的 0 - 255 的字符相对应。每个字符都表示原字符含义,没有转义字符,<value> 两边的引号("")是必须的,但不计算在 <length> 当中。这里的 <value> 相当于一个字节流,而 <length> 是这个字节流的字节个数。