php调用thrift,今天碰上了一个看似诡异的问题:php调thrift的一个方法,传递一个参数“6010101033”,可到了java端取到的时“6442450943”,开始以为是哪个地方写错了,全局搜索“64…”也没搜到什么结果~~~后来java端的同事说“可能是越界了”~~~嗯,还真有可能:thrift定义使用的是i64,php内部接收get参数,会做字符串处理,但当调用thfift接口时,貌似默认会将数值按照integer类型传递,相当于thirft的i32,对于超出范围的数值,自然就要出问题了
发现了问题,解决起来自然就是很容易的事,”$id = (double)$id;”,强制转成double,测试ok了
ps:这里转成string是没有用的,因为本来就是string类型,string转数值时才出的问题
从一开始使用thrift就被告诫说数值类型需要做强制类型转换,但由于php基本不怎么区分类型,所以一直也没做过这种转换,也没有发现过问题,但是随着业务的扩大,id慢慢长大,问题便逐步暴漏了~~~常在河边走,哪能不湿鞋~~~~以后还是小心点吧