【发布时间】:2017-11-07 02:13:49
【问题描述】:
我知道 PHP 不支持无符号 64 位整数。
但是我只需要通过 PDO 查询从 MySQL 表中读取无符号的 64 位整数值,并将它们传递给客户端(不执行任何计算或比较); PHP 页面正在向客户端发布一个非常简单的 REST 接口,并且应该仅将查询结果输出为 JSON 数据。
现在 PDO 查询返回未触及的整数,只要它们是 63 位宽(无符号),但是当表中的原始值设置了第 64 位时,PDO 驱动程序将其转换为字符串(我设置了@ 987654324@ 属性为 false,因为我希望尽可能保留类型)。
当我调用json_encode()函数时,相关字段得到相同的处理:当它们超过63位宽度时它们变成字符串。
我不想将它们作为字符串留在 json 输出中,因为它需要对客户端代码进行“破坏性”更改才能让它们在解码时处理 json-string 到 ulong 的转换。
有没有办法以某种方式自定义 json_encode 行为以将它们输出为“UInt64”?
我查看了 JsonSerializable,但它似乎无法解决我的问题。
【问题讨论】:
-
您可以使用数学扩展来支持 PHP 中的无符号 64 位整数,如果它不支持:php.net/manual/en/intro.gmp.php(这是一条评论,因为它不是您问题的答案)。对您的问题:是的,您可以自定义 json 编码,请参阅:php.net/manual/en/class.jsonserializable.php
-
@KIKOSoftware 我不认为 jsonSerializable 是一个解决方案:这个类只允许您选择必须序列化的内容,而不是如何。
-
好吧,看来我必须编写自己的 json 编码器了。我希望我能避免这种情况。来吧,2017 年的语言怎么可能没有内置对无符号 64 位整数的支持????
标签: php json encoding 64-bit unsigned-integer