0

我正在尝试学习switch casephp 代码。这是使用 break 时运行良好的程序。

for ($i=1;$i<=100;$i++) {
switch(true) {
        case ( $i%5 == 0  && $i%3 == 0 ):
            print 'foobar';
            break;
        case ( $i%3 == 0  ):
            print 'foo';
            break;
        case ( $i%5 == 0 ):
            print 'bar';
            break;
        case ( $i%5 != 0  && $i%3 != 0 ):
            print $i;
            break;
    } 
    echo '<br>';
}

但是当我使用以下代码时,它给了我意想不到的结果:

for ($i=1;$i<100;$i++) {
switch(true) {
    case ( $i%3 == 0  ):
        print 'foo';
    case ( $i%5 == 0 ):
        print 'bar';
    default:
        print $i;
}
echo '<br>';
}

第二个例子有什么问题?即使执行上述任何情况,也会default执行?还有为什么$i%5case 在$i等于 3 时运行?

4

2 回答 2

1

因为第一个使用break,而第二个片段没有。

如果您不添加break,即使不满足该条件,也将执行下一个案例中的代码。

这就是switchPHP 中的工作原理,以及其他几种类似 C 的语言。它不同于(类似的)case语句,因为您可能从类似 Pascal 的语言和 SQL 中知道它。

于 2013-07-24T10:50:24.333 回答
0

在 PHPswitch()语句中,一旦case满足 a ,后面的每一行代码都将被执行,直到 abreak或块的末尾。

这允许有意使用所谓的“失败”

这就是为什么您的第一个示例有效,而您的第二个示例未按预期执行的原因。

于 2013-07-24T10:54:31.210 回答