Switch Case,cand';我不明白


Switch Case, couldn't understand

我正在尝试学习switch case php代码。以下是使用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等于3时,为什么运行$i%5情况??

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

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

这就是switch在PHP以及其他一些类似C语言中的工作方式。它不同于(类似的)case语句,正如您从类似Pascal的语言和SQL中所知道的那样。

在PHP switch()语句中,一旦满足case,接下来的每一行代码都将被执行,直到break或块结束。

这允许有意使用所谓的"穿透"

这就是为什么你的第一个例子有效,而你的第二个例子没有达到你的预期。