代码之家  ›  专栏  ›  技术社区  ›  timpone

为什么这个评价是真的?

php
  •  1
  • timpone  · 技术社区  · 14 年前

    这是什么评价为真的?

    <?php
    
    
    $val2=0;
    
    //outputs that is an error123
    if($val2=='error123'){
       echo 'that is an error123<br />';
    }else{
       echo 'that is not an error123<br />';
    }  
    
    2 回复  |  直到 14 年前
        1
  •  13
  •   Mark Byers    14 年前

    你在比较一个字符串和一个整数。为了进行比较,首先将字符串转换为整数。什么时候? 'error123' 被转换为整数,它变为0。

    echo intval("error123");
    

    结果:

    0
    

    在PHP手册中有 an explanation 对于这种行为。

    如果您将一个数字与一个字符串进行比较,或者比较涉及数字字符串,那么每个字符串都会转换为一个数字,然后进行数值比较。

    有一个快速参考页面 PHP type comparison tables 这显示了各种比较的结果。参见表“松散比较与==”。关于这个问题有趣的部分是 0 == "php" 显示为真。

    还有一页在 type juggling . 一 user comment 在那一页上给出了几乎与此完全相同的例子。

    如果你不想玩花样游戏 === 而不是 == .

        2
  •  3
  •   uotonyh    14 年前

    尝试一下: $val2==='error123'

    这将评估价值 变量的类型。这里更多:

    http://us.php.net/manual/en/language.operators.comparison.php