if ($html['state'] == 0){
$html['stateHtml'] = '你未验证';
} else {
$html['stateHtml'] = '通过';
}************************************if ($html['state'] == '0'){
$html['stateHtml'] = '你未验证';
} else {
$html['stateHtml'] = '通过';
}
为什么这两个判断的结果完全不一样,不是说数字用不用''括起来都一样吗
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
*/
$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
*/
上面的一段相当于逻辑判断,后一段代码相当于比较运算。即,第一段是$html['state'] == false;而第二段相当于$html['state'] ='0'?ture:false.仅个人看法。
1.最重要一条:(int)0在逻辑判断中与(bool)false等价
2.不是说数字用不用''括起来都一样——这个使用的前提就是不能有歧义,就是上面第一条
3.类型的自动转换只存在于出现转换的情况,这个似乎很难理解,但这样说,如果一个运算结果为(string)'0',是不会转换为(int)0的,转换只会在过程中,而不是结果
例如
var_dump(str_replace('abc','','abc0'));
str_replace('abc','','abc0')+1
前者输出为string,后者输出int