Switch Case,无法理解

时间:2013-07-24 10:48:12

标签: php switch-statement

我正在尝试学习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%5$i等于3 ??

时运行的情况

2 个答案:

答案 0 :(得分:1)

因为第一个使用break,而第二个片段不使用break

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

这就是case在PHP中的工作原理,以及其他几种类似C语言的工作原理。它与(类似的){{1}}语句不同,因为您可能从Pascal类语言和SQL中了解它。

答案 1 :(得分:0)

在PHP switch()语句中,一旦满足case,就会执行以下每行代码,直到break或块的结尾。

这允许故意使用所谓的“堕落”

这就是为什么你的第一个例子有效并且你的第二个例子没有按照你的预期做的原因。

相关问题