PHP切换功能无法识别“小于0”

时间:2012-07-26 21:51:37

标签: php

$bytes = 0;
switch($bytes){
    case $bytes == 0:
        echo 'Equal to 0.';
    break;
    case $bytes < 0:
        echo 'Less than 0.';
    break;
}

输出“小于0”。

为什么?

3 个答案:

答案 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。