示例代码没问题。
if ($xxx != false) {
echo 'xxxxxxxxxxx';
} else {
echo 'aaaaaaaaaaa';
}
// result: xxxxxxxxxxx
if ($xxx !== 0) {
echo 'xxxxxxxxxxx';
} else {
echo 'aaaaaaaaaaa';
}
// result: aaaaaaaaaaa
但是这个让我感到困惑
if ($xxx != 0) {
echo 'xxxxxxxxxxx';
} else {
echo 'aaaaaaaaaaa';
}
// result: aaaaaaaaaaa
$ xxx是字符串,为什么这段代码返回false? 我已阅读文档http://www.php.net/manual/en/types.comparisons.php,但仍然不了解它。
答案 0 :(得分:0)
如果赋值为:$xxx='0'
(字符串类型数值),则条件if ($xxx != 0)
将返回FALSE;也就是说,它试图与它的数值进行比较。
<强> CASE-1:强>
$xxx = '0';
if ($xxx != 0) {
echo 'xxxxxxxxxxx';
} else {
echo 'aaaaaaaaaaa';
}
// result: aaaaaaaaaaa
<强> CASE-2:强>
$xxx = '0';
if ($xxx !== 0) {
echo 'xxxxxxxxxxx';
} else {
echo 'aaaaaaaaaaa';
}
// result: xxxxxxxxxxx
答案 1 :(得分:0)
查看http://php.net/manual/en/types.comparisons.php字符串
如果您的字符串为null,则行为与您在队列中的行为相同
Loose comparisons with ==
NULL --> TRUE
Strict comparisons with ===
NULL --> FALSE
答案 2 :(得分:0)
因为!=不是一个聪明的人。它无法准确确定此值是字符串类型还是布尔类型。
如果你想要精确比较,你应该使用!==
答案 3 :(得分:0)
$var1 = false; // yes
if ($var1 == 0) echo 'yes'; else echo 'no';
$var2 = 0; // yes integer convert to boolean
if ($var2 == false) echo 'yes'; else echo 'no';
$var3 = '0'; // yes string 2 integer 2 boolean
if ($var3 == false) echo 'yes'; else echo 'no';
$var4 = 0; // no integer not 2 boolean
if ($var4 === false) echo 'yes'; else echo 'no';
$var5 = '0'; // no string not 2 integer and not 2 boolean
if ($var5 === false) echo 'yes'; else echo 'no';