为什么会这样?
<?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 文档,任何不是null
或empty
(或零)的字符串都将被转换为 True。
所以你的比较就像True ==
True。
如果您使用该===
运算符,您还将检查两个值是否属于同一类型。
http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
我看了一下php操作员文档..
在您的情况下,您说==
“true”的布尔值等于“SOME TEXT”的文本值,但不是相同的数据类型。在这种情况下,PHP 返回 true,因为如果您忽略数据类型,假设它们是相似的。
如果您使用===
,那么它将考虑数据类型,因此会产生一个 false 值。
这是因为 PHP 的自动类型转换;并且由于您也没有按类型进行比较(===),因此它被认为是 TRUE。这是一个被认为是空的列表,但它也被认为是 FALSE:
以下内容被认为是空的:
""(一个空字符串)
0(0 为整数)
0.0(0 作为浮点数)
"0" (0 作为字符串)
无效的
错误的
array() (一个空数组)
$var; (声明的变量,但没有值)
其他一切基本上都被认为是真实的。