带有比较运算符的 PHP 错误



我知道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 大于 109 大于 10

有人可以解释一下代码在此比较中失败的位置和原因。

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

这计算结果为:

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

函数foo()总是返回一些值。在这种情况下,布尔型和 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 />";
}
?>
你可以

这样做,

<?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 />";
}
?>

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

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

相关内容

  • 没有找到相关文章