2019年8月8日 星期四

switch 中的 continue (C、PHP)

[在 switch 中使用 continue]
C:
在 C 的 switch 中使用 continue,若不是在迴圈中,出現錯誤
#include 
#include 

int main(int argc, char** argv) {
    int c = 10;
    switch (c) {
        case 7:
            continue;//error:continue statement not within a loop
    }
    return (EXIT_SUCCESS);
}

PHP:
在 PHP 的 switch 中使用 continue,沒傳遞參數時,跟使用 break 意思一樣
 「In PHP the switch statement is considered a looping structure for the purposes of continue. continue behaves like break (when no arguments are passed). If a switch is inside a loop, continue 2 will continue with the next iteration of the outer loop.
參考:https://www.php.net/manual/en/control-structures.continue.php
$c=7;
switch ($c) {
  case 7:
      var_dump("continue test");
    continue;
  default:
      var_dump($c);
    break;
}
//輸出 string(13) "continue test"




[在迴圈中的 switch 中使用 continue]
C:
在 C ,迴圈(例如while)中的 switch 使用 continue,效用會針對迴圈(例如while)
#include 
#include 

int main(int argc, char** argv) {
    int c = 10;
    while (c > 6) {
        c--;
        switch (c) {
            case 7:
                continue;
        }
        printf("%d\n", c);

    }
    return (EXIT_SUCCESS);
}
/*
輸出
9
8
6
*/

PHP:(情況一)
在 PHP,迴圈(例如while)中的 switch 使用 continue,沒傳遞參數時,跟使用 break 意思一樣
$c=10;
while ($c>6) {
   $c--;
   switch ($c) {
      case 7:
        var_dump("continue test");
        continue;
   }
   var_dump($c);
}
/*
輸出
int(9)
int(8)
string(13) "continue test"
int(7)
int(6)
*/
註:在 PHP 7.3 以上,迴圈內的 switch 使用「continue」、「continue 1」,會出現
Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"?
,因為「continue」、「continue 1」其實就等於「break」,開發者寫「continue」不寫「break」,很可能是為了作用到外層的迴圈,所以出現此Warning,提醒開發者。

PHP:(情況2)
在 PHP,迴圈(例如while)中的 switch 使用 continue,若要對外層的迴圈作用,須使用「continue 數字」。
例如「continue 2」,
第1次continue作用在內層的switch,
第2次continue作用在外層的迴圈(例如while)。
$c=10;
while ($c>6) {
   $c--;
   switch ($c) {
      case 7:
        var_dump("continue test");
        continue 2;
   }
   var_dump($c);
}
/*
輸出
int(9)
int(8)
string(13) "continue test"
int(6)
*/


沒有留言:

張貼留言