为你剖解PHP序列化格式
对于那些刚刚接触PHP语言的朋友来说,什么是PHP序列化格式可能大家都还是不太清楚。我们今天就为大家详细讲解这一方面的知识。
PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize、unserialize。不过在 PHP 手册中对这两个函数的说明仅限于如何使用,而对序列化结果的格式却没做任何说明。
因此,这对在其他语言中实现PHP序列化格式来说,就比较麻烦了。虽然以前也搜集了一些其他语言实现的 PHP 序列化的程序,不过这些实现都不完全,当序列化或反序列化一些比较复杂的对象时,就会出错了。
于是我决定写一份关于PHP序列化格式详解的文档(也就是这一篇文档),以便在编写其他语言实现的 php 序列化程序时能有一个比较完整的参考。
这篇文章中所写的内容是我通过编写程序测试和阅读 PHP 源代码得到的,所以,我不能 100% 保证所有的内容都是正确的,不过我会尽量保证我所写下的内容的正确性,对于我还不太清楚的地方,我会在文中明确指出,也希望大家能够给予补充和完善。
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 分别表示对象引用和指针引用,这两个也比较有用,在序列化比较
相关文档:
服装网店管理系统是由E易网络(68ws.cn)基于php+mysql开发,具有服装类网店的常用的功能和完善的商品类型管理、商品管理、配送支付管理、订单管理、会员分组、会员管理、查询统计和多项商品促销功能。系统具有静态HTML生成、UTF-8多语言支持、可视化模版引擎等技术特点,适合建立服装、鞋帽、服饰类网店。系统具有以下主要功 ......
开发Web应用程序PHP是最理想的工具,易于使用、功能强大、成本低廉、高安全性、开发速度快且执行灵活。全书以实用为目标设计,内容丰富,包含PHP开发最主流的各项技术,对每一个知识点都进行了深入详细的讲解,并附有大量的实例代码,图文并茂。从运行环境搭建、PHP的基本语法和规范入手,由浅入深,循序渐进,系统的介绍了 ......
我是一个工作了一年零两个月的PHP程序员,在工作前学习了LAMP兄弟连网站上高洛峰老师的全部PHP教学视频,可谓受益匪浅,是高老师将我带入了PHP的领域,今年终于等到了期待已久的高老师的《细说PHP》,先是在网上看到了样章,仅从样章中就可以看到作者所付出的艰辛,也可以看出作者的技术实力,优点颇多,迫不及待的网购了 ......
call_user_func函数类似于一种特别的调用函数的方法,使用方法如下:
<?php
function a($b,$c)
{
echo $b;
echo $c;
}
call_user_func('a', "111","222");
call_user_func('a', "333","444");
//显示 111 222 333 444
?>
调用类内部的方法比较奇怪,居然用的是ar ......
最近在处理小鱼社区的开发过程,遇到程序的性能问题,在解决这个问题的时候提出几个建议:
1、处理while/foreach之类的循环要特别注意,因为这个循环可能是好几千次的,所以里面的每句语句都要注意执行速度,要精简。还有个不好的习惯一定要注意,不要在这个中写太长的程序,因为这可能让你在几百行的代码中迷失,慢慢地迷 ......