有个关于 PHP 的小疑惑

129 天前
 seansong
第一次对接几个 php 写的接口,遇到一个能理解但想好奇八卦一下的细节,对方接口返回 json ,其中有个字段

"is_completed": 0
"is_completed": "0"
"is_completed": false

同一个接口返回的完全一样的同一份数据,为什么每次请求,得到的数据类型都不一样呢,而且是随机的,有时候接口返回的数组中,不同元素里面的这个字段,都会出现不一样的类型,什么场景下会出现这种情况,个别程序员搞成这样的,还是 php 生态中就是这样

弱类型,好像能理解,但就是好奇罢了
6172 次点击
所在节点    PHP
73 条回复
vem
129 天前
有可能这个字段是存 Redis 缓存的,有时候从缓存取,有时候数据库取导致返回值不一样了
sagaxu
129 天前
PHP 传统,除了 str 和 int 不分,{}和[]也不分,框架随意整,程序员也不在意,前端会兼容,岁月静好
ferock
129 天前
PHP 传统,写接口的那位不在意。。。
uqf0663
129 天前
false==0 能理解,但是 false=="0"绝对不是 php 的锅
abccccabc
129 天前
你要告诉 php ,把值固定下来,不然强类型语言无法解析,一会字符串、一会整型,数据类型都变了,只能定义一种数据类型。这样,php 端马上就能改了。我以前也是这样的
akira
129 天前
这种就是 个别 程序员 的锅了, 啥语言都会有类似的问题的。
zhhqiang
129 天前
应该有判断导致的吧 可能是多个位置处理赋值导致不一样
glitter1105
129 天前
你规定要什么类型的值,告诉后端必须这样处理。
kk2syc
129 天前
写接口的 phper 不在意,你和他沟通,强制为 int 就行,php 就加 3 行代码能解决
caola
129 天前
有可能是从不同地方获取的数据,就不去管对应的是什么类型直接输出了,
有时从数据库获取是正确类型,有时是从 redis 或表单获取默认就是字符串类型,在 PHP 用 if 判断 0 、"0"、false 都得到相同的结果 false ,所以什么类型就不是那么重要,同样前端 js 也表现一样,所以大多数情况下的前后端都没有类型上的问题
realpg
129 天前
if 条件一 return false elseif 条件二 return 0 elseif 条件三 return "0"

很正常 他们自己程序内这些都好处理 对外提供的接口你跟他沟通一下就完事了 不是什么过分要求
因为在他们那边都一样 他不太注意这个 不是问题
jiuhuicinv
129 天前
false==0 能理解,但是 false=="0"绝对不是 php 的锅
hefish
129 天前
php 程序员便宜知道吧。 便宜他总有便宜的道理。
angrylid
129 天前
不应该说,世界上最好的语言,其伟大之处就是能让这些人也入行?
z7356995
129 天前
你自己单步执行一步步调试一下
Felldeadbird
129 天前
如果是同一个接口类型变化,PHP 没有强制返回类型。业务逻辑上返回了 0 和“0”,语言特性。

如果不是同一个接口,大概率还是写代码的人水平太低了。没有统一的数据处理。加上语言特性导致返回类型可变
wenber
129 天前
多条逻辑判断结果值类型随意定义罢了,PHP 在国内的名声就是让这帮“二杆子货”霍霍了
seansong
129 天前
@abccccabc 那倒不会说无法处理,在反序列化的时候注意一下就行,只是,心里特别没底,因为不知道有多少是测试阶段没遇到的,可能就漏处理了,我也就是临时帮别人写个小东西,看到这种情况,好奇了一下而已
prosgtsr
129 天前
我在对接某个支付的时候遇到过这个问题,搞得我这边解析 json 报错了,去反馈之后告诉我在某个场景下会出现……
我又一次理解到了为啥企业项目喜欢用 java 开发
kivmi
129 天前
感谢 php ,让我一个高中的也能入行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1128194

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX