2016-12-31 6 views
-2

サンプルコードはokです。

if ($xxx != false) { 
    echo 'xxxxxxxxxxx'; 
} else { 
    echo 'aaaaaaaaaaa'; 
} 

// result: xxxxxxxxxxx 


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

// result: aaaaaaaaaaa 

しかし、この1は私に

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

$ xxxは文字列、なぜこのコードは、私はfalseを返しますが混乱? 私は文書http://www.php.net/manual/en/types.comparisons.phpを読んだことがありますが、まだそれについては理解していません。

+7

比較が起こる$ XXXの値は何ですか?私たちはそれを知らずにあなたを助けることはできません。その間に[多分あなたの答えを見つけるでしょう](http://stackoverflow.com/q/672040/6096242)。 – tilper

+0

$ xxxはブール型ですか? –

答えて

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 
0

あなたの文字列がnullの場合、文字列

ためhttp://php.net/manual/en/types.comparisons.phpを見て、その後動作がありますあなたの疑問にお答えします。

Loose comparisons with == 

NULL --> TRUE 

Strict comparisons with === 

NULL --> FALSE 
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'; 
関連する問題