为什么功能:
function wtf($dH)
{
switch ($dH)
{
case ($dH >= 0.0 && $dH < 1.0):
echo '$dH>=0';
break;
case ($dH >= 1.0 && $dH < 2.0):
echo '$dH>=1';
break;
case ($dH >= 2.0 && $dH < 3.0):
echo '$dH>=2';
break;
case ($dH >= 3.0 && $dH < 4.0):
echo '$dH>=3';
break;
case ($dH >= 4.4 && $dH < 5.0):
echo '$dH>=0';
break;
case ($dH >= 5.0 && $dH < 6.0):
echo '$dH>=5';
break;
default:
echo '$dH>=6';
break;
}
}
wtf(0.0);
在调用之后返回: “$卫生署&GT; = 1” 0.0
???
这是错误的答案,因为它应该返回第一种情况:“$ dH&gt; = 0”。
???
中找到了这个结构答案 0 :(得分:5)
switch语句与多个if语句相同 但是......你不需要重新输入if语句,你在这里做什么。
您有两种选择:
- 或者你检查一下bool
- 或者用if
因为你已经有了一个开关,所以我选择了这个片段中的第一个:
private function wtf($dH)
{
switch (true)
{
case ($dH >= 0.0 && $dH < 1.0):
dd('$dH>=0', $dH);
break;
case ($dH >= 1.0 && $dH < 2.0):
dd('$dH>=1', $dH);
break;
case ($dH >= 2.0 && $dH < 3.0):
dd('$dH>=2', $dH);
break;
case ($dH >= 3.0 && $dH < 4.0):
dd('$dH>=3', $dH);
break;
case ($dH >= 4.0 && $dH < 5.0):
dd('$dH>=4', $dH);
break;
case ($dH >= 5.0 && $dH < 6.0):
dd('$dH>=5', $dH);
break;
default:
dd('$dH>=6', $dH);
break;
}
}
现在,如果输出为真,您将检查每个case
,这应该适用于您的代码段。
答案 1 :(得分:2)
为什么会发生这种情况:
($dH >= 1.0 && $dH < 2.0)
评估为(0.0 >= 1.0 && 0.0 < 2.0)
,这是错误的。
然后由于PHP松散类型比较模型,它会神奇地转换为0。
您的开关现在看起来像这样:
switch (0)
{
case 1 /* 0.0 >= 0.0 && 0.0 < 1.0 === true */:
dd('$dH>=0', $dH);
break;
case 0:
dd('$dH>=1', $dH);
break;
case 0:
dd('$dH>=2', $dH);
break;
case 0:
dd('$dH>=3', $dH);
break;
case 0:
dd('$dH>=4', $dH);
break;
case 0:
dd('$dH>=5', $dH);
break;
default:
dd('$dH>=6', $dH);
break;
}
换句话说,不要使用像ifs那样的开关,因为它们不是。