我在PHP转换语句中遇到了一个令人费解的问题
$strKey = 0;
$answer = null;
switch($strKey){
case 'intProductionOrder':
$answer = 'intProductionOrder';
break;
case 'second':
$answer = 'second';
break;
default:
$answer = 'default';
}
echo $answer;
应该返回默认值但不返回,它返回intProductionOrder,为什么?
答案 0 :(得分:1)
查看此帖子了解原因:Why does PHP consider 0 to be equal to a string?
case语句中的字符串在比较之前会被转换为int,然后它会进入第一个case语句。在switch语句中使用strval()来修复它并强制比较字符串。
答案 1 :(得分:1)
String conversion to numbers
在数值上下文中计算字符串时,结果值 和类型确定如下。
如果字符串不包含'。' ,' 或中的任何字符' E' 并且数值适合整数类型限制(由...定义) PHP_INT_MAX ),该字符串将被计算为整数。在所有其他 案例将被评估为浮动。
该值由字符串的初始部分给出。如果是字符串 从有效的数字数据开始,这将是使用的值。 否则,该值将为0 (零)。有效的数字数据是 可选符号,后跟一个或多个数字(可选地包含一个 小数点),后跟可选的指数。指数是&#39; 或&#39; <&#39; 后跟一个或多个数字。