【问题标题】:PHP bugs with comparison operator [closed]带有比较运算符的 PHP 错误 [关闭]
【发布时间】:2012-12-01 18:04:07
【问题描述】:

由于自动类型声明,我知道 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

谁能解释我在这个比较中代码在哪里以及为什么失败。

【问题讨论】:

  • 在声明错误之前多搜索一下。但是,如果这是一个更复杂的问题,您可以。
  • 当您将返回值视为 1 时,只需阅读布尔值:php.net/boolean

标签: php compare operator-keyword


【解决方案1】:

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

计算结果为:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      你可以这样做,

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 或者,更好的是return ($answer &gt; 10);
        • 你不喜欢我的编辑? @pan
        • @PeeHaa:来吧;你必须知道那是可怕的。 :) 我们应该鼓励修复返回值,而不是固定它。
        • 哦。我都支持相同的返回类型:)
        猜你喜欢
        • 1970-01-01
        • 2014-06-14
        • 2010-12-02
        • 2021-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多