2.概述
PHP 序列化后的内容是复杂的文本格局,然而对字母巨细写和空白(空格、回车、换行等)敏感,并且字符串是依照字节(或说是 8 位的字符)盘算的,因而,更适合的说法是 PHP 序列化后的内容是字撙节格局。因而用其他言语完成时,假如所完成的言语中的字符串不是字节贮存格局,而是 Unicode 贮存格局的话,序列化后的内容不合适保留为字符串,而应保留为字撙节对象或字节数组,不然在与 PHP 停止数据互换时会发生毛病。
PHP 对分歧类型的数据用分歧的字母停止标示,Yahoo 开辟网站供应的 Using Serialized PHP with Yahoo! Web Services 一文中给出一切的字母标示及其寄义:
a - array
b - boolean
d - double
i - integer
o - common object
r - reference
s - string
C - custom object
O - class
N - null
R - pointer reference
U - unicode string
N 暗示的是 NULL,而 b、d、i、s 暗示的是四种标量类型,今朝其它言语所完成的 PHP 序列化法式根基上都完成了对这些类型的序列化和反序列化,不外有一些完成中对 s (字符串)的完成存在成绩。
a、O 属于最经常使用的复合类型,大局部其他言语的完成都很好的完成了对 a 的序列化和反序列化,但对 O 只完成了 PHP4 中对象序列化格局,而没有供应对 PHP 5 中扩大的对象序列化格局的撑持。
r、R 分离暗示对象援用和指针援用,这两个也对照有效,在序列化对照庞杂的数组和对象时就会发生带有这两个标示的数据,前面咱们将具体解说这两个标示,今朝这两个标示尚没有发明有其他言语的完成。
C 是 PHP5 中引入的,它暗示自界说的对象序列化体例,虽然这关于其它言语来讲是没有需要完成的,由于很少会用到它,然而前面仍是会对它停止具体解说的。
U 是 PHP6 中才引入的,它暗示 Unicode 编码的字符串。由于 PHP6 中供应了 Unicode 体例保留字符串的才能,因而它供应了这类序列化字符串的格局,不外这个类型 PHP5、PHP4 都不撑持,而这两个版本今朝是主流,因而在其它言语完成该类型时,不保举用它来停止序列化,不外可以完成它的反序列化进程。在前面我也会对它的格局停止申明。
最初还有一个 o,这也是我独一还没弄清晰的一个数据类型标示。这个标示在 PHP3 中被引入用来序列化对象,然而到了 PHP4 今后就被 O 代替了。在 PHP3 的源代码中可以看到对 o 的序列化和反序列化与数组 a 根基上是一样的。然而在 PHP4、PHP5 和 PHP6 的源代码中序列化局部里都找不到它的影子,然而在这几个版本的反序列化法式源代码中却都有对它的处置,不外把它处置成甚么我还没弄清晰。因而对它临时不再作更多申明了。