if ($html['state'] == 0){
 $html['stateHtml'] = '你未验证';
} else {
 $html['stateHtml'] = '通过';
}************************************if ($html['state'] == '0'){
 $html['stateHtml'] = '你未验证';
} else {
 $html['stateHtml'] = '通过';
}
为什么这两个判断的结果完全不一样,不是说数字用不用''括起来都一样吗

解决方案 »

  1.   

    如果==运算符的两个操作数类型不同,PHP就会自动进行类型的隐式转换,具体请仔细阅读PHP手册中的相关章节:
    http://php.net/manual/zh/language.types.type-juggling.php//举个简单的例子:
    $arr = array(0,'abc');
    foreach($arr as $v) echo $v == 0 ? 'true<br />' : 'false<br />';
    echo "<br />";
    foreach($arr as $v) echo $v == '0' ? 'true<br />' : 'false<br />';
    /*
    输出:
    true  // 0 == 0 结果为true
    true  // 'abc' == 0 此时PHP会先将字符串'abc'转换为整数0,所以运算结果为truetrue  // 0 == '0' 字符串'0'隐式转换为整数0,结果为true
    false // 'abc' == '0' 此时两个操作数类型相同,不进行类型转换,运算结果为false
    */
      

  2.   

    //举个简单的例子:
    $arr = array(0,'abc');
    foreach($arr as $v) echo $v == 0 ? 'true<br />' : 'false<br />';
    echo "<br />";
    foreach($arr as $v) echo $v == '0' ? 'true<br />' : 'false<br />';
    /*
    输出:
    true // 0 == 0 结果为true
    true // 'abc' == 0 此时PHP会先将字符串'abc'转换为整数0,所以运算结果为truetrue // 0 == '0' 字符串'0'隐式转换为整数0,结果为true
    false // 'abc' == '0' 此时两个操作数类型相同,不进行类型转换,运算结果为false
    */
      

  3.   

    人个认为这两段代码其实本质是有些区别的。
    上面的一段相当于逻辑判断,后一段代码相当于比较运算。即,第一段是$html['state'] == false;而第二段相当于$html['state'] ='0'?ture:false.仅个人看法。
      

  4.   

    编辑不了了,只能引用一个来补充一点。$html['state'] ='0'?true:false.实际上这个只是为了表示清关系,如果print $html['state']当然是什么也不会显示的。
      

  5.   

    一些概念要厘清
    1.最重要一条:(int)0在逻辑判断中与(bool)false等价
    2.不是说数字用不用''括起来都一样——这个使用的前提就是不能有歧义,就是上面第一条
    3.类型的自动转换只存在于出现转换的情况,这个似乎很难理解,但这样说,如果一个运算结果为(string)'0',是不会转换为(int)0的,转换只会在过程中,而不是结果
    例如
    var_dump(str_replace('abc','','abc0'));
    str_replace('abc','','abc0')+1
    前者输出为string,后者输出int
      

  6.   

    看你的$html['state']的值。因为对比的时候会自动cast的。