$bytes = 0;
switch($bytes){
case $bytes == 0:
echo 'Equal to 0.';
break;
case $bytes < 0:
echo 'Less than 0.';
break;
}
输出“小于0”。
为什么?
答案 0 :(得分:8)
switch
陈述不是那样的。在检查每个case
时,会将该值与case
值进行比较(使用==
)。
所以,PHP正在做:
$bytes == ($bytes == 0)
吗?这是:$bytes == (true)
。这是false
,因此已被跳过。$bytes == ($bytes < 0)
吗?这是:$bytes == (false)
。这是true
,因此它会运行该块。您需要在此使用if/else
。
$bytes = 0;
if($bytes == 0){
echo 'Equal to 0.';
}
elseif($bytes < 0){
echo 'Less than 0.';
}
答案 1 :(得分:1)
一个老问题,但还有另一种使用交换机的方式:)我在SitePoint上找到了它!
switch (true) {
case $bytes == 0: // result of this expression must be boolean
echo 'Equal to 0.';
break;
case $bytes < 0: // result also must be boolean
echo 'Less than 0.';
break;
default:
}
说明:如果true == ($bytes == 0)
或true == ($bytes > 0)
或default:
如果你有很多假结果而不是switch (false) {}
x != y
答案 2 :(得分:0)
您不能在switch语句中使用运算符。它实际应该是:
$bytes = 0;
switch($bytes){
case 0:
echo 'Equal to 0.';
break;
default:
echo 'Something else';
break;
}
查看完整文档:http://www.php.net/manual/en/control-structures.switch.php
为什么您的样本会导致'小于零'?简单问题: ($ bytes&lt; 0)计算结果为false,因为它不是。 False等于0,因此它匹配$ bytes并且属于这种情况。
如果你需要匹配某些范围,你必然会使用if-else-constructs。