在php中解决奇怪的布尔表达式

时间:2009-05-15 11:57:39

标签: php types boolean

$foo = 0;

if($foo == 'on') $foo = 1;

echo $foo;

应该预期上面的代码输出“0”。但是,它不会$foo == 'on'导致TRUE,尽管这显然是错误的。用$foo === 'on'替换表达式给出了正确的答案,因此任何怀疑这可能是一些打字问题似乎都得到了证实。

然而,如果$foo'on'的类型不同,那么PHP如何认为$foo'on'?这是一个错误还是一些奇怪的功能?

2 个答案:

答案 0 :(得分:3)

在php中是字符串的松散比较(==),而int 0被评估为True。虽然严格比较(===)也比较了相同类型,但这意味着如果展位变量是字符串或整数,则进行比较。但这被评估为false,因为$ foo是一个int而'on'是一个字符串。 另请参阅php.net上的比较表:http://php.net/types.comparisons

答案 1 :(得分:3)

this is a documented behaviour

  

如果将整数与字符串进行比较,则字符串将转换为数字。如果比较两个数字字符串,则将它们作为整数进行比较。这些规则也适用于switch语句。