$foo = 0;
if($foo == 'on') $foo = 1;
echo $foo;
应该预期上面的代码输出“0”。然而,它不会,以某种方式$foo == 'on'
导致TRUE
,尽管这显然是错误的。将表达式替换为$foo === 'on'
给出正确答案,因此任何怀疑这可能是一些打字问题似乎都得到了证实。
然而,PHP 怎么能认为$foo
是'on'
如果$foo
甚至'on'
不是同一类型呢?这是一个错误还是一些奇怪的功能?
在 php 中是一个字符串的松散比较 (==) 并且 int 0 被评估为 True。虽然严格比较 (===) 也会比较相同的类型,这意味着如果展位变量是字符串或整数,则会进行比较。但这被评估为假,因为 $foo 是一个 int 而 'on' 是一个字符串。另请参阅 php.net 上的比较表:http: //php.net/types.comparisons
如果将整数与字符串进行比较,则字符串将转换为数字。如果比较两个数字字符串,它们将作为整数进行比较。这些规则也适用于 switch 语句。