0

自動型宣言のため、PHP の比較演算子が 100% ではないことはわかっています。

いくつかのテストを行ったところ、このコードが見つかりました

<?php
function foo($answer) {
    if ($answer > 10) {
        return true;
    } else {
        return $answer;
    }
}
if (foo(11)) {
    echo "11 is bigger than 10<br />";
}        
if (foo(9)) {
    echo "9 is bigger than 10<br />";
}
?>

出力は次のとおりです。

11 は 10 より大きい 9 は 10 より大きい

誰かがこの比較でコードが失敗する場所と理由を説明できますか?

4

4 に答える 4

4

return $answer両方のテストケースで真実だからです。

これは次のように評価されます。

if (11) { ...
if (9) { ...
于 2012-12-01T18:05:28.397 に答える
1

関数foo()は常に何らかの値を返します。この場合、boolean 型と int 型の両方です。戻り値を比較するときは、より厳密であることを確認してください。

<?php
function foo($answer) {
    if ($answer > 10) {
        return true;
    } else {
        return $answer;
    }
}

if (foo(11) === true) {
   // This returned TRUE 
   echo "11 is bigger than 10<br />";
}

if ( is_int(foo(9)) === true ) {
   //This returned int 
   echo "9 is bigger than 10<br />";
}
?>
于 2012-12-01T18:08:56.387 に答える
1

あなたはこれを行うことができます、

<?php
function foo($answer) {
    return ($answer > 10);
}

if (foo(11)) {
    echo "11 is bigger than 10<br />";
}        
if (foo(9)) {
    echo "9 is bigger than 10<br />";
}
?>
于 2012-12-01T18:14:56.407 に答える
0

あなたはそれを間違った方法で比較しています. $answer はゼロ以外の値であり、PHP ではゼロ以外のすべての値が真であると見なされます。

function foo($answer) {
    if ($answer > 10) {
        return true;
    } else {
        return false;
    }
}
于 2012-12-01T18:07:59.433 に答える