2016-12-31 54 views
-2

示例代码正常。

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为字符串,为什么这个代码返回我假? 我已阅读文档http://www.php.net/manual/en/types.comparisons.php但仍不明白。

+7

什么的$当比较出现XXX值?如果不知道这一点,我们无法帮助你。在此期间[也许你会在这里找到你的答案](http://stackoverflow.com/q/672040/6096242)。 – tilper

+0

$ xxx是bool类型? –

回答

0

如果分配的值是这样的:$xxx='0'(字符串类型数值),则条件if ($xxx != 0)将返回FALSE;也就是说,它试图与它的数值进行比较。

CASE-1:

$xxx = '0'; 
if ($xxx != 0) { 
    echo 'xxxxxxxxxxx'; 
} else { 
    echo 'aaaaaaaaaaa'; 
} 
// result: aaaaaaaaaaa 

情形2:

$xxx = '0'; 
if ($xxx !== 0) { 
    echo 'xxxxxxxxxxx'; 
} else { 
    echo 'aaaaaaaaaaa'; 
} 
// result: xxxxxxxxxxx 
0

因为!=不是一个聪明的。它不能确定这个值是字符串类型还是布尔类型。

您应该使用==代替,如果你想精确比较

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