php中奇异布尔表达式的求解

php中奇异布尔表达式的求解,php,types,boolean,Php,Types,Boolean,应预期上述代码输出“0”。然而,它并没有,不知何故,$foo==“on”会导致TRUE,尽管这显然是错误的。将表达式替换为“上的”

应预期上述代码输出“0”。然而,它并没有,不知何故,
$foo==“on”
会导致
TRUE
,尽管这显然是错误的。将表达式替换为“上的”
然而,如果
$foo
'on'
甚至不是同一类型,PHP怎么能认为
$foo
'on'
?这是一个bug还是一些奇怪的特性?

在php中是字符串与int 0的松散比较(=),计算结果为True。虽然严格比较(==)也会对相同类型进行比较,这意味着如果booth变量是字符串或整数,则会对其进行比较。但这被评估为false,因为$foo是一个int,而“on”是一个字符串。 另请参见php.net上的比较表:

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

$foo = 0;

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

echo $foo;