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 回答