[精讚] [會員登入]
1411

[PHP>7.3] switch中的 Did you mean to use "continue 2"? 除錯

“
這近更新 PHP到7.3版以後,出現這樣的錯:targeting switch is equivalent to "break". Did you mean to use "continue 2"?解決方法
„

分享此文連結 //n.sfs.tw/15080

分享連結 [PHP>7.3] switch中的 Did you mean to use "continue 2"? 除錯@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2021-12-24 11:07:38 最後編修
2021-05-05 13:18:13 By 張○○
 

自動目錄

這近更新 PHP到7.3版以後,出現這樣的錯:

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /path/to/x.php on line 123

程式碼類似:

while ($foo) {
   switch ($bar) {
      case "baz":
         continue;
         // Warning: "continue" targeting switch is equivalent to
         //          "break". Did you mean to use "continue 2"?
   }
   do();
}

原本的邏輯是當 $bar== 'baz' 的情況時,就跳過switch後面的部分,也就是第8行的do()不會被執行到,重跑while的判斷。

到了php 7.3版以後,就出錯了,出錯原因在於7.3版以後,認真的把switch視為迴圈看待,事實上switch本來就屬於迴圈,而不是一個函數。

這也能說明為什麼case裡面會有"break"的存在。

如果迴圈裡有一個continue的話,代表就是重跑下一筆判斷,但是在switch裡重跑判斷就會無窮迴圈,所以在switch裡continue=break;

continue 2?

因此改寫成continue 2,這裡的2代表父迴圈:繼續父迴圈,自己是1省略不寫,父迴圈是2,祖父迴圈是3、曾祖父迴圈是4以此類推…

以下範例

for($ii=0;$ii<5;$ii++){
  for($jj=0;$jj<10;$jj++){
    switch($jj){
      case 1: print "ii: $ii, jj: $jj\n"; continue 3;
    }
  }
}

第4行採用 continue 3,所以會直接跳到 第1行的祖父迴圈

執行結果:

ii: 0, jj: 1
ii: 1, jj: 1
ii: 2, jj: 1
ii: 3, jj: 1
ii: 4, jj: 1

參考資料

[1] https://www.php.net/manual/en/migration73.incompatible.php

[2] https://www.php.net/manual/en/control-structures.continue.php

 

 

 

END

你可能感興趣的文章

[PHP7] 讀取mysql資料庫的傳統方法 使用傳統預設的方法來連結mysql資料庫

[PHP] 解析二進位圖片 使用php來解析png圖片,把資料寫在16進位格式

[PHP] 字串編碼及解碼函式 為何要將字串編碼?理由很簡單,就是不要讓人家輕易的知道字串內容是什麼。例如點選分頁時,我們常會用這樣的連結: index

[PHP] 類別中要怎麼使用callback function 召回函數(回呼函數)? 在類別中使用標準函數,若其中的callback 函數也是在類別中,該怎麼使用?

使用Yahoo OAuth2 2/2 使用Yahoo OAuth2認證我的網頁

[CodeIgniter 3] 資料庫的使用方法整理2/2 CI3 承襲 CI2,有很多的builder class可以用,依各人的使用習慣,有人喜歡一堆sql字串,有人喜歡用helper

隨機好文

[Freebsd] 定時測試 ADSL 是否斷線並重連 中華電信 ADSL 雖有固定 ip,可是他卻會不定時「斷線」, 使用以下的 方法可以定時測試是否斷線,以及重新撥接。

為什麼要重造輪子? 什麼輪子?造什麼輪子?我為什麼要重造輪子?

看懂DSUB DVI HDMI USB等各式影音接頭 看懂DSUB DVI HDMI等各式影音接頭

好用的3+2碼郵遞區號查詢系統推薦 網路上找到用地址輸入判斷3+2碼郵遞區號的辨識率不高,除了這個網站…

Smarty安裝 smarty 是著名的樣版引擎,非常的好用,用多了突然發現拿掉smarty反而不會寫php了,以下是安裝過程..