设为首页 收藏本站
查看: 1537|回复: 0

[经验分享] Hprose for PHP类型映射

[复制链接]

尚未签到

发表于 2017-3-25 12:44:40 | 显示全部楼层 |阅读模式
基本类型
值类型
类型描述
整型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类是相对应的。另外,类名(包括名空间部分)是区分大小写的。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-355254-1-1.html 上篇帖子: php常用函数(1) 下篇帖子: php防止sql注入
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表