if语句的奇怪行为

时间:2011-12-03 17:18:05

标签: php

以下似乎有效,但我真的认为不应该这样做:

if ("'True','False'" == 0)
{
    echo 'Hello, World.';
}

是否将最后一个False从字符串中剔除,如果是这样,为什么,以及如何阻止它?

4 个答案:

答案 0 :(得分:3)

这是由于打字松动造成的。将字符串与数字进行比较时,PHP必须将一个字符串转换为另一个类型。在这种情况下,当字符串转换为整数时,该字符串的值为0,条件为True。

答案 1 :(得分:1)

当与数字进行比较时,任何字符串的计算结果为0(除非它是一个弦数,例如“5”或“4string”)。这就是为什么它总是评估为0。

请参阅 Type Comparison Table

答案 2 :(得分:1)

真正发生的事情是PHP正在尝试进行隐式类型转换,并且由于某种原因,它在转换为整数时决定字符串看起来像0.你可以通过这样做来证明这一点:

echo ((int) "'True','False'");

如果你想进行类型检查比较,你应该使用三等于(===):

if("'True','False'" === 0)

......这肯定会评估为假。

答案 3 :(得分:1)

没有;它将字符串"'True','False'"转换为数字 - 该数字为00 == 0true。如果我正确理解你的意图,或者你应该使用通常使用的严格相等!"'True','False'",你可以使用===来解决它。