有个关于 PHP 的小疑惑

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

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

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

弱类型,好像能理解,但就是好奇罢了
6231 次点击
所在节点    PHP
73 条回复
DOLLOR
134 天前
@uqf0663
@jiuhuicinv

php 里写 [false == 0] 跟 [false == "0"] 还真没区别

参考 php ==真值表:
https://imgur.com/a/sDmywKN


出处 https://github.com/sentientmachine/php_equality_charts
8355
134 天前
@seansong #37 可能是你对接的人比较菜吧。。。大厂一样用 php ,什么语言对输入输出结果没有任何影响,一样有很多可以写出规范代码的人。
kivmi
134 天前
@kk2syc 直接用,有什么问题?提前暴露问题不是更好?你非要把你的代码,搞的什么觉得有多么健壮?等到了生产,出问题了然后查日志去?实际开发,也很难遇到过你这么复杂的场景,本身就是用来处理基本类型的,你非要整个对象,违背了它设计的初衷。
kivmi
134 天前
@easychen 你这一加,php 不就更慢了?
kivmi
134 天前
@QlanQ 好些年没写 php 了,php8 特性有些没关注到
kivmi
134 天前
@seansong php8 跟 ts 一样,可以指定类型了,加个类型而已,难道加个类型会被搞死?就像你写 js 的,就不会 ts 了?
dabingbing
134 天前
PHP 写多了,不习惯强类型,但是实际上写 PHP 代码的时候,会有意的强制类型,比如 intval 之类的
seansong
134 天前
@kivmi “你这一加,php 不就更慢了?” 按理说,严格类型,应该是变快吧,怎么会更慢呢?当然,我不了解 php 的内存管理,这么说不一定对哈,不用做隐式转换,应该是节约了资源才对
ibin
134 天前
@seansong 更快了,避免隐式类型转换
kivmi
134 天前
@seansong 好问题!的确没有隐式转换肯定会快,但是 php 所有的类型都是使用 ZVAL 一个结构体来存储的,php 是做不到真正的强类型的,这是 PHP 的设计问题! declare(strict_types=1)并不影响 php 的类型设计,只是约束了函数参数和返回值的类型而已!并没有对 php 的类型有实质性的改变!
0IuL7w7X5K2HJxZf
134 天前
@newtype0092 你真搞了中间件统一了的话,很可能会在你有很多意想不到的地方报 bug 一堆出来。
seansong
134 天前
@kivmi 你这么说,我大概理解了,php 存的并不是 raw data ,那严格类型确实不会带来性能的提升
siweipancc
134 天前
0 ,空字符串,空数组,-1 都属于 false ,就问你怕不怕
sycxyc
134 天前
@siweipancc -1 不属于 false 吧。其它例子也适用于 js
will800
134 天前
@kivmi #20 据说 rails 更灵活一点,怎么不从 rails 入行呢?
kivmi
134 天前
@will800 你在说什么?回复我刚写的 python fastapi 的问题?
kivmi
134 天前
@will800 哦 我知道你说的应该是高中那条!以前 ruby 国内没那么火,java 和 php 最火,java 一直卡学历,然后转的 php
NowTime
134 天前
负责维护的一个 Laravel 项目,4 年前还是 PHP 7.1, Laravel 5.8 ,现在已经升级到了 PHP 8.4 、Laravel 12 了,学过 Java 所以对 PHP 类型声明一点都不突兀反而觉得很好用,并且能用对象的都用对象不使用 array ,基本很难出现什么 API 字段类型不对、弱判断等问题,代码也写的很舒服。
michealzh
133 天前
这个不是 php 的问题...
gloeaerris
133 天前
这个是个人问题,不是 PHP 的问题,门槛太低就会有很多菜鸡

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

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

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

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

© 2021 V2EX