为什么这个happen?
<?php $result = true ;
if($result == 'SOME TEXT')
echo 'why is this true? why is this printed?';
else
echo 'when this should be printed?'
?>
请解释一下,我不是在寻找替代方法。
答案 0 :(得分:4)
在表达式中,您将布尔值与字符串进行比较。该字符串被强制转换为true
。
参考:http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
如前所述,使用===
比较值和类型。
答案 1 :(得分:1)
因为您使用==
运算符而不是===
。
在您的情况下,==
不依赖于操作数类型,而不是===
答案 2 :(得分:0)
这是因为PHP的自动类型转换;因为你不是按类型比较(===),所以它被认为是真的。 Here是一个被认为是空的列表,但它也被视为FALSE:
以下内容被认为是空的:
“”(空字符串)
0(0为整数)
0.0(0作为浮点数)
“0”(0作为字符串)
NULL
FALSE
array()(一个空数组)
$变种; (声明的变量,但没有值)
其他一切基本上都被认为是真的。
答案 3 :(得分:0)
我看了一下php运营商文档..
在您的情况下,您使用==
说布尔值“true”等于“SOME TEXT”的文本值但不是相同的数据类型。在这种情况下,PHP返回true,因为如果忽略数据类型,只假设它们是相似的。
如果您使用===
,则会考虑数据类型,因此会生成false值。
答案 4 :(得分:0)
因为您要将布尔值与字符串进行比较,所以字符串将自动转换为布尔值。
根据PHP文档,任何非null
或empty
(或零)的字符串都将转换为True。
所以你的比较就像真==
真。
如果您使用===
运算符,则还要检查两个值是否属于同一类型。
http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting