基本类型
值类型
类型 |
描述 |
整型 |
Hprose中的整型为32位有符号整型数,表示范围是-2147483648~2147483647(-231~231-1)。 |
长整型 |
Hprose中的长整型为有符号无限长整型数,表示范围仅跟内存容量有关。 |
浮点型 |
Hprose中的浮点型为双精度浮点型数。 |
非数 |
Hprose中的非数表示浮点型数中的非数(NaN)。 |
无穷大 |
Hprose中的无穷大表示浮点型数中的正负无穷大数。 |
布尔型 |
Hprose中的布尔型只有真假两个值。 |
空 |
Hprose中的空表示引用类型的值为空(null)。 |
空串 |
Hprose中的空串表示空字符串或零长度的二进制型。 |
其中非数和无穷大其实是特殊的浮点型数据,只不过在Hprose中它们有单独的表示方式,这样可以使它们占用更少的存储空间,并得到更快的解析。
另一个可能会引起您注意的是,这里把空和空串也作为值类型对待了。这里把它列为值类型而不是引用类型,是因为Hprose中的值类型和引用类型的概念与程序设计语言中的概念不完全相同。这里的值类型是表示在Hprose序列化过程中,不做引用计数的类型。在序列化过程中,当遇到相等的值类型时,后写入的值将与先写入的值保持相同的形式,而不是以引用的形式写入。
引用类型
类型 |
描述 |
二进制型 |
Hprose中的二进制型表示二进制数据,例如字节数组或二进制字符串。 |
字符串型 |
Hprose中的字符串型表示Unicode字符串数据,以标准UTF-8编码存储。 |
日期型 |
Hprose中的日期型表示年、月、日,年份范围是0~9999。 |
时间型 |
Hprose中的时间型表示时、分、秒(毫秒,微秒,毫微秒为可选部分)。 |
日期时间型 |
Hprose中的日期时间型表示某天的某个时刻,可表示本地或UTC时间。 |
空字符串和零长度的二进制型并不总是表示为空串类型,在某些情况下它们也表示为各自的引用类型。空串类型只是对二进制型和字符串型的特殊情况的一种优化表示。
引用类型在Hprose中有引用计数,在序列化过程中,当遇到相等的引用类型时,后写入的值是先前写入的值的引用编号。
后面介绍的容器类型和对象类型也都属于引用类型。
基本类型的映射
PHP类型与Hprose类型的映射关系不是一一对应的。在序列化和反序列化过程中可能会有一种PHP类型对应多种Hprose类型的情况出现(当然条件会有不同)。我们下面以列表的形式来说明。
序列化类型映射
PHP类型 |
Hprose类型 |
整数 |
整型 |
纯数字字符串 |
长整型 |
浮点数 |
浮点型 |
is_nan为true的浮点数 |
非数 |
is_infinite为true且大于0的浮点数 |
正无穷大 |
is_infinite为true且小于0的浮点数 |
负无穷大 |
true |
布尔真 |
false |
布尔假 |
NULL |
空 |
非utf8字符串 |
二进制型(或空串) |
utf8字符串 |
字符串型(或空串) |
HproseDate对象 |
日期型 |
HproseTime对象 |
时间型 |
HproseDateTime对象 |
日期时间型 |
反序列化类型映射
默认类型是指在对Hprose数据反序列化时,在不指定类型信息的情况下得到的反序列化结果类型。
Hprose类型 |
PHP类型 |
整型 |
整数 |
长整型 |
纯数字字符串 |
浮点型 |
浮点数 |
非数 |
浮点数中的NaN |
正无穷大 |
浮点数中的正无穷大 |
负无穷大 |
浮点数中的负无穷大 |
布尔真 |
true |
布尔假 |
false |
空 |
NULL |
空串 |
"" |
二进制型 |
字符串 |
字符串型 |
utf8编码的字符串 |
日期型 |
HproseDate对象 |
时间型 |
HproseTime对象 |
日期时间型 |
HproseDateTime对象 |
容器类型
Hprose中的容器类型包括列表类型和字典类型两种。它们都对应于PHP的数组类型。
列表类型
任何以从0开始的连续整数作为索引的数组,都被映射为Hprose列表类型。例如:
$array = array(1, 2, 3, 4, 5);
数组是否映射为列表类型只与索引有关,与元素值无关,所以元素值可以是同一种类型,也可以是不同类型。
字典类型
所有除映射为Hprose列表类型以外的数组类型均映射为Hprose字典类型,例如:
$a = array( 1 => 'one', 2 => 'two', 3 => 'three' );
$map = array( 'version' => 4,
'OS' => 'Linux',
'lang' => 'english',
'short_tags' => true
);
都被映射为Hprose字典类型。
另外PHP的stdClass对象也被映射为字典类型,例如从数据库中查询出的每一行数据。
对象类型
PHP中自定义类的对象实例在序列化时被映射为Hprose对象类型。自定义类中的字段名,映射为Hprose对象类型中的属性名,自定义类中的字段值,映射为Hprose对象类型中的属性值。所有的字段必须为可序列化类型,在PHP中除了资源类型以外的其它类型均为可序列化类型。
PHP中通过在类名中使用下滑线来定义与其它带有名空间的语言对应的类,例如PHP中定义的My_NameSpace_ClassName与C#中的My.NameSpace.ClassName类是相对应的。另外,类名(包括名空间部分)是区分大小写的。