2
$foo = 0;

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

echo $foo;

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

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

4

2 回答 2

3

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

于 2009-05-15T12:07:21.310 回答
3

这是记录在案的行为

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

于 2009-05-15T12:11:22.673 回答