我有这个代码,其中$ difference = 0
switch ($difference)
{
case 0<=$difference && $difference<300:
return "A";
break;
case 300<=$difference && $difference<600:
return "B";
break;
}
我认为开关必须返回A但它会重新开始B.什么错了???
答案 0 :(得分:1)
使用您正在使用的表达式的开关将不会像您想象的那样进行评估。请改用if
语句:
if(0<=$difference && $difference<300)
{
return "A";
}
else if(300<=$difference && $difference<600)
{
return "B";
}
答案 1 :(得分:1)
我发布此信息仅仅是为了提供信息。
开关可以与表达式一起使用,但这很难做到:
<?php
$value = 300;
$other = 1;
switch (true) {
case $value <= 300 && $other:
$var = 'A';
break;
case $value >= 300 && !$other:
$var = 'B';
break;
case $value >= 300 && $other:
$var = 'C';
break;
case $value > 300 && $other:
$var = 'D';
break;
default:
$var = 'FALSE';
break;
}
echo $var;
以上代码将正确显示“C”。 if / else语句的组合是等价的,但我倾向于发现交换机更具可读性。请务必始终包含一个默认大小写,其值可以依赖(或者可以从函数返回,抛出异常等)。
您还可以比较其他变量,类型,调用函数(尽管不推荐)等,以匹配switch语句中声明的值(在本例中为true
,但可以是整数,字符串或任何其他基础类型)。
答案 2 :(得分:0)
在这种情况下,$difference
等于0
的情况被解释为false
。因此你有switch(false)
。每个案例都作为一个整体进行评估,案例2实际上返回false
,从而匹配switch语句评估并返回B
。它还与松散类型检查有关。 PHP.net