1
Part OP By the way,如何找出某函数在PHP中的实现,git源码(https://github.com/php/php-src)中,无从下手。
|
2
picasso250 2014-02-17 17:07:34 +08:00 3
http://www.php.net/manual/en/language.operators.comparison.php
请注意阅读文档中的转换表(规则1至规则7) 规则0: 如果两者中包含数字或者数字式的字符串,会变成数字。(数字亲和原则)所以,257就是正确的 1. array() == "" false // array和任意东西比较 array较大 规则7 2. array() == 0 false // array和任意东西比较 array较大 规则7 3. array() == false true // bool和任意东西比较,转换为bool 规则2 4. array() == null true // null和任意东西比较,转换为bool 规则2 5. "" == 0 true // 规则0 6. "" == false true // 规则2 7. 0 == null true // 规则2 8. "" == null true // null转换为"" 规则1 请再次阅读文档。 ps 我觉得这问题很无聊(更无聊的是我竟然回答你……) |
3
shiny 2014-02-17 17:09:45 +08:00 1
研究它为什么这么转换我觉得没什么意义。
知道这个的存在,谨慎使用松散比较就可以了。 |
4
picasso250 2014-02-17 17:11:30 +08:00
更正 规则0:如果两者都是字符串/数字,会转换成数字。(数字亲和原则)
|
5
picasso250 2014-02-17 17:15:47 +08:00
|
6
Part OP @picasso250 thx!
|
7
jakwings 2014-02-17 17:40:33 +08:00
我的观点和 shiny 的差不多。这种比较没什么大的意义,假如你编程语言接触得更多了,就越是会有这种感觉,平时应该用 === 而不是 == ,不确定是什么类型时,最好先判断类型。
|
8
FrankFang128 2014-02-17 18:28:41 +08:00
避免这些比较
|
9
Mutoo 2014-02-17 21:06:03 +08:00
最近看 《maintainable javascript》 里面有提及在js中类似的情况,是由js的隐似类型转换决定的。
两个类型不一致的对象比较时,会将较高阶的一方转换成较低阶的,再进行比较,例如隐式调用 valueOf() 或者 toString() php与javascript有许多的相似之处,可以这样理解 array()与""作比较,转换成 String 后是 "Array",结果当然不相等 ""与false比较,""转换成bool后即false,所以相等 |
10
picasso250 2014-02-18 13:19:59 +08:00
|
11
tonitech 2014-02-20 21:48:52 +08:00
楼主为什么要比较这些啊?
@picasso250 感谢你的分享! |