吐槽一下 PHP 的官方实现

2014-02-18 16:42:11 +08:00
 mantianyu
http://www.php.net/manual/en/language.types.boolean.php

When converting to boolean, the following values are considered FALSE:

the boolean FALSE itself
the integer 0 (zero)
the float 0.0 (zero)
the empty string, and the string "0"
an array with zero elements
an object with zero member variables (PHP 4 only)
the special type NULL (including unset variables)
SimpleXML objects created from empty tags

为什么强转 boolean 时 "0" 被认为是 false, 既然如此, 那 "false" 怎么不认为是 false?
3977 次点击
所在节点    程序员
17 条回复
vibbow
2014-02-18 16:48:29 +08:00
因为 "false" 是不为空的string
GordianZ
2014-02-18 16:54:19 +08:00
如果 "false" 算 false, 那 "False"/"FaLsE"/"假" 呢?
joyqi
2014-02-18 17:01:08 +08:00
这有啥好吐槽的
yelite
2014-02-18 17:01:56 +08:00
我猜是因为url参数和post的表单解析出来直接是string,为了方便php就有了这种设计
mantianyu
2014-02-18 17:02:11 +08:00
@GordianZ 我就是这个意思, 如果 "false", "False", "FALSE", "NO", "OFF" 都不算 false, 为什么 "0" 是例外?
mantianyu
2014-02-18 17:03:22 +08:00
@joyqi 跟国风接轨嘛
vibbow
2014-02-18 17:04:04 +08:00
@mantianyu 因为 (int)0 和 (string)0 是无痛转换的?
hanf
2014-02-18 17:08:06 +08:00
php蛋疼又不是两三天了
infong
2014-02-18 17:16:23 +08:00
因为 "0" == 0 而且 0 == false
所以 "0" == false
liruqi
2014-02-18 17:18:36 +08:00
你也可以坚持用 === 嘛。
liuyao729
2014-02-18 17:39:49 +08:00
字符串除了 0 就没有为假的了
likexian
2014-02-18 17:44:45 +08:00
如果非要那么纠结,就忘记php有==,只用===
jakwings
2014-02-18 23:35:59 +08:00
@infong 不应该用 == 来作传递性说明的…… == 比较比直接转化为布尔值麻烦多了。
var_dump("0.0" == 0.0); //=> bool(true)
var_dump((bool)"0.0"); //=> bool(true)
var_dump((bool)0.0); //=> bool(false)

我觉得 yelite 说得比较有道理。
heirenhua
2014-02-19 12:05:54 +08:00
@mantianyu 你可以看一下PHP中字符串和数字的转换规则。"0"被认为false,只是因为被转换了。
nina
2014-02-19 15:50:52 +08:00
技术讨论帖 发个招聘小纸条 小交易招资深php开发一名,至少3年实打实的项目经验。PHP高级开发: 15-20k
岗位职责:
网站服务端开发,包括后端逻辑以及数据库,缓存等方面。
岗位要求:
1、三年以上PHP开发经验,有高并发访问的 Web 应用开发经验;
2、具备大型开发项目的规划、方案设计以及重构经验的经验;
3、对 PHP技术及整个解决方案有深刻的理解及熟练的应用,并且精通架构和设计模式,并在此基础上设计产品框架;
4、精通网络和服务器优化、缓存、分布式存储技术,拥有异构系统开发部署和优化经验;
5、精通数据库如 Mysql 等的开发 ,熟悉linux shell 脚本的编写,对数据库优化有较深见解。对 memcached 及 NOSql、REDIS 有一定了解;
6,精通LNMP或LAMP架构。
7、对计算机系统、网络和安全、应用系统架构等有全面的认识,并有实践基础;
qq281079797
lygmqkl
2014-02-19 19:33:12 +08:00
这个应该算自己偷懒的表现,如果你使用的是你自己生成的变量,那么不会有这个疑惑,如果是input进来的自然要做变脸转换,否则php代码的质量如何保证?
picasso250
2014-02-20 09:40:47 +08:00
?is_foo=0
?is_foo=1

var_dump($_GET('is_foo'));
var_dump((bool)$_GET('is_foo'));

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

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

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

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

© 2021 V2EX