PHP错误与比较运算符

时间:2012-12-01 18:04:08

标签: php compare operator-keyword

我知道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 个答案:

答案 0 :(得分:4)

因为return $answer在两个测试用例中都是真实的。

评估结果为:

if (11) { ...
if (9) { ...

答案 1 :(得分: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 />";
}
?>

答案 2 :(得分: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 />";
}
?>

答案 3 :(得分:0)

你正在以错误的方式比较,$ answer是非零值,而在PHP中使用条件时,每个非零值都被认为是真的。

function foo($answer) {
    if ($answer > 10) {
        return true;
    } else {
        return false;
    }
}