2012-03-17 7 views
5
$my_var = ""; 

    if ($my_var == 0) { 
    echo "my_var equals 0"; 

    } 

それが真と評価なぜ?それについてphp.netにいくつかの参照はありますか?PHPの空のvar == 0? PHPで

答えて

3

PHP is a weakly typed language。空の文字列とブールfalseは等価演算子==でテストすると0と評価されます。一方、次のような、同一のオペレータ===を使用して種類を確認するためにそれを強制することができます

$my_var = ""; 

if ($my_var === 0) { 
    echo "my_var equals 0"; 
} else { 
    echo "my_var does not equal 0"; 
} 

これはあなたの主題についての情報のトンを与える必要があります。How do the PHP equality (== double equals) and identity (=== triple equals) comparison operators differ?

1

最初の行では、$my_varを文字列として定義します。

比較の中では、その変数を定数と比較します。

あなたは、正確な比較を(あなたはどのキャストなしで整数と文字列を比較する必要がなぜ私にはわからない)したい場合は、あなたが使用する必要があり===:メッセージをエコーすることはありません

if ($my_var === 0) { 
    echo "my_var equals 0"; 
} 

PHPマニュアルは、ASオペレータ==Comparison Operators sectionに定義:$ Aはタイプジャグリング後$ Bに等しい場合

TRUE。

ここで重要なのはtype jugglingです。

実際には、PHP Manual: types comparisonsには、0という文字列が""と等しいことを2番目の表に正確に示しています。

1

はこれがためですあなたが使用している等価演算子に由来する型強制です。

PHP manualには、これを照会するタイプ比較表があります。

このようなコーナー(?)の場合を避けるために、代わりに同一のオペレータ===を代わりに使用することをお勧めします。ここで

0

はブール値

http://www.php.net/manual/en/language.types.boolean.php

、ここで約PHPマニュアルで参照が同じである「」ため、NULL値

http://www.php.net/manual/en/language.types.null.php 

$my_var = ''; 

if ($my_var == 0) { 
    echo "my_var equals 0" 
} 

ための基準が真と評価されていますfalseまたは0と評価されるNULL

3

文字列と整数は、==と直接比較できません。したがって、PHPはタイプジャグリングを実行して、他に類を見ない比較があるかどうかを確認します。

文字列と整数を比較すると、文字列はまず整数に変換されます。変換の詳細はhereです。基本的に""は有効な数値ではないため、変換結果は0です。従って、比較は、明らかに真である0 == 0になる。

ほとんどの(すべてではないにしろ)比較のために、ID比較===を使用することをお勧めします。

+0

これまでのところ、私は==存在することを忘れていて良かったです。 – JohnA