为什么会这样?
<?php $result = true ;
if($result == 'SOME TEXT')
echo 'why is this true? why is this printed?';
else
echo 'when this should be printed?'
?>
请解释,我不是在寻找替代方法。
在表达式中,您正在将布尔值与字符串进行比较。字符串被强制转换为true
。
参考:http://www.php.net/manual/en/language.types.boolean.php language.types.boolean.casting
如前所述,使用===
来比较值和类型。
因为您使用==
操作符而不是===
。在您的情况下,==
不依赖于操作数类型,而不是===
这是因为PHP的自动类型转换;并且由于您没有按类型进行比较(===),因此它被认为是TRUE。下面是一个列表,它被认为是空的,但也被认为是FALSE:
以下内容被认为为空:
";"(一个空字符串)
0(0为整数)
0.0(0为浮点数)
"0";(0作为字符串)
零假
array()(空数组)
$ var;(已声明的变量,但没有值)
我看了一下php操作符文档。
在您的情况下,您使用==
说布尔值"true"等于"SOME text"的文本值,但不具有相同的数据类型。在这种情况下,PHP返回true,因为如果忽略数据类型,它只是假设它们是相似的。
如果您使用===
,那么它将考虑数据类型,因此将产生false值
由于您正在将布尔值与字符串进行比较,因此字符串将自动转换为布尔值。
根据php文档,任何不是null
或empty
(或零)的字符串将被转换为True。
所以你的比较就像True ==
True。
如果您使用===
运算符,您还检查两个值是否具有相同的类型。
http://www.php.net/manual/en/language.types.boolean.php language.types.boolean.casting