2011-12-05 6 views
0

私の過去のコードでは、2つの関数を実行してその値を返すために変数が必要でした。次のそれのようなユーザーにメッセージを返すチェックオン非常に奇妙なPHP関数の返信の説明

function 1($variable) { 
    check($variable); 
    return $variable // either a -1, -2 or true; 
} 

// pass the return to next function 

function 2($variable) { 
    check($variable); 
    return $variable // either a -1, -2 or true; 
} 

:今

if($variable == -1) // display message 
    if($variable == -2) // display message 
    if($variable == true) // display message 

、仕事の要件ごとの変数は、まだ-1を返す第三機能チェックを通過する必要があります - 2またはtrueを返し、最後のif文を表示します。 これは奇妙なところです。私は2つの機能でそれを維持した場合の文が作業している場合、しかし、私は3番目のチェック機能によってそれを実行した場合、正しくリターンをチェックするために、このようなものだ場合、私は私をフォーマットする必要があります:私は追加する必要が

if($variable === -1) // display message 
if($variable === -2) // display message 
if($variable === true) // display message 

お知らせ3番目の '='記号。なぜこれが起きているのか分かりません。これは私が知らないか、これはバグですか?

+0

バグはありません。値と同様に値段も揃えたいと思います。 –

答えて

1

これは奇妙な動作ではなく、PHPにとっては非常に自然です。発現後

if ($variable == true) { 
} 

はPHPが(この場合はBOOLEANで)あまりpretensiveタイプに左オペランドをキャストし、この後の比較を行うことを意味します。 $変数の値が0またはFALSEまたはNULLでない場合はTRUEになります。

2番目のケースでは、厳密なチェック値があり、両方のオペランドの型が比較されます。

1

三重等号は、比較される2つのオブジェクトがちょうど等しく、(同じタイプおよび値の)同一でない場合にのみtrueを返す(===)サイン。例えば

$a = 1; 
$b = "1"; 

echo $a == $b; // True 
echo $a === $b; // False 
+0

私はそれを理解していますが、なぜPHPが '==='を使用するように思われるのか分かりません。最初から-1を、2番目に-1を、3番目に-1を返したら、なぜ理論的にはうまくいかないのでしょうか? if(-1 == -1)?これは、(-1 === -1)の場合にのみこの形式で動作します。これは、PHPが途中で混乱し、値が同じタイプと値であることを確認して、自分自身を安心させるようにする必要があるのとほぼ同じです。 – Naterade

0

あなたのコードを使用して、関数や店舗のリターンを呼び出す方法を示していない、問題がある可能性があります。さらに、関数1と2はイラストのためだけに呼び出されたとします。なぜなら、関数名の開始名が数字ではわからないからです。

===は、「正確に等しい」(値とタイプ)です。論理テストのためによく使われます。なぜなら、時には0をfalse、1を真と区別する必要があるからです。

関連する問題