有史以来最简单的Q. PHP中$ var!= 0

时间:2016-12-31 16:21:38

标签: php

示例代码没问题。

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,但仍然不了解它。

4 个答案:

答案 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';