2011-05-09 90 views
12

我敢肯定,这是我福利局PHP知识,简单的根本缺陷,但我很惊讶,当以下事情发生了:字符串比较上一个布尔

enter image description here

$resultTRUE ...所以为什么它被认为与字符串“email”相等?我猜这是因为,从技术上讲,这是一个bool,它不是假的?所以当它与一个字符串(例如“email”)进行比较时,它会返回true。

我应该改变我的方法返回结果为string包含“真”(而不是成功return true;),或者有另一种方式,我应该这样做吗?

谢谢。

+1

请粘贴您的代码而不是截图。 – TJHeuvel 2011-05-09 14:24:55

+2

@TJ,我发布截图的原因是因为它显示了'$ result'的内容,并且它通过了条件测试。再加上它实际上是三行代码。 – 2011-05-09 14:26:39

+0

啊!它不是我的代码违背编程规律,它只是PHP! – 2014-12-11 13:09:32

回答

14

是的,true等于(==)为非空字符串。不完全相同(===)。

我建议你仔细阅读type comparison table

+0

优秀。非常感谢。 – 2011-05-09 14:29:19

+0

+1提醒身份 – 2011-05-09 14:30:52

+0

不完全正确!空字符串(“”)和字符串零(“0”)被视为FALSE。所有其他人都是真的! – 2012-11-16 04:57:31

1

if($result === "email")会做的伎俩,但个人我永远不会这样。

+0

你会建议什么方式? – 2011-05-09 14:28:47

+0

为什么你永远不会那样? – meze 2011-05-09 14:29:23

+0

个人我会去2个变量。一个用于有效结果,另一个用于先前定义的错误。提高了代码的可读性,但我认为它纯粹是一种个人编码风格。应该留下这个注释。 – DanielB 2011-05-09 14:35:20

3

它返回true,因为php会尝试转换某些东西来比较它们。在这种情况下,它可能会尝试将右侧的字符串转换为布尔值,在这种情况下将为true。真实的==真实是正确的。

通过执行$ result ===“email”(triple =),告诉PHP它不应该执行转换,并且如果类型不匹配应该返回false。