$foo = 0;
if($foo == 'on') $foo = 1;
echo $foo;
应该预期上面的代码输出“0”。但是,它不会$foo == 'on'
导致TRUE
,尽管这显然是错误的。用$foo === 'on'
替换表达式给出了正确的答案,因此任何怀疑这可能是一些打字问题似乎都得到了证实。
然而,如果$foo
和'on'
的类型不同,那么PHP如何认为$foo
为'on'
?这是一个错误还是一些奇怪的功能?
答案 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语句。