
1 Part OP By the way,如何找出某函数在PHP中的实现,git源码(https://github.com/php/php-src)中,无从下手。 |
2 picasso250 Feb 17, 2014 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 PRO 研究它为什么这么转换我觉得没什么意义。 知道这个的存在,谨慎使用松散比较就可以了。 |
4 picasso250 Feb 17, 2014 更正 规则0:如果两者都是字符串/数字,会转换成数字。(数字亲和原则) |
5 picasso250 Feb 17, 2014 |
6 Part OP @picasso250 thx! |
7 jakwings Feb 17, 2014 我的观点和 shiny 的差不多。这种比较没什么大的意义,假如你编程语言接触得更多了,就越是会有这种感觉,平时应该用 === 而不是 == ,不确定是什么类型时,最好先判断类型。 |
8 FrankFang128 Feb 17, 2014 避免这些比较 |
9 Mutoo Feb 17, 2014 最近看 《maintainable Javascript》 里面有提及在js中类似的情况,是由js的隐似类型转换决定的。 两个类型不一致的对象比较时,会将较高阶的一方转换成较低阶的,再进行比较,例如隐式调用 valueOf() 或者 toString() php与Javascript有许多的相似之处,可以这样理解 array()与""作比较,转换成 String 后是 "Array",结果当然不相等 ""与false比较,""转换成bool后即false,所以相等 |
10 picasso250 Feb 18, 2014 |
11 tonitech Feb 20, 2014 楼主为什么要比较这些啊? @picasso250 感谢你的分享! |