0

使用ifelseif,可以轻松地进行下面的比较,但出于学习目的,我正在分析是否可以使用 具有相同的功能switch

如果$x接收到正值或负值,我得到正确的输出,但如果$x接收0(零),我得到输出“低”,但正确的输出应该是“相等”。

这是代码:

$x = 0;

switch($x)
{
    case ($x < 0):
        echo 'Lower';
        break;

    case ($x == 0):
        echo 'Equal';
        break;

    case ($x > 0):
        echo 'Bigger';
        break;
    default:
        echo 'Not found';
}

是否可以使用带有表达式的 switch 语句作为案例?

4

3 回答 3

4

switch($x)将其替换为switch(true)

于 2012-07-09T00:49:36.227 回答
1

您实际上不再匹配数字,而是匹配布尔结果。

任何正数或负数都转换为 booleantrue并且仅0转换为,因此基本上对于您要比较的false正数或负数or并给出您期望的结果。true($x < 0)($x > 0)

但是,0强制转换为falseand (0 == 0)istrue所以你永远不会在那里匹配。同样,您在 switch 中的第一条语句也是匹配的0 < 0false

于 2012-07-09T00:57:41.280 回答
0

您正在比较 $x 是否等于测试结果,当 时$x = 0,$x 的布尔值为false。如果它不同于 0,则为true。这就是为什么你总是会陷入第一个返回的测试false

试试这个:

$x = 0;

switch($x)
{

case 0:
    echo 'Equal';
    break;

case ($x < 0):
    echo 'Lower';
    break;

case ($x > 0):
    echo 'Bigger';
    break;

default:
    echo 'Not found';

}

我还在评论中读到您想知道是否可以在每个case. switch是的,有可能 :

$x = 0;

switch($x)
{

case ($x < 0):
    echo 'Lower';
    break;

case ($x > 0):
    echo 'Bigger';
    break;

case ($x <> 0):
    echo 'Equal';
    break;

default:
    echo 'Not found';

}

($x <> 0)何时返回 false$x = 0并回显“Equal”

于 2012-07-09T01:06:45.117 回答