- PHP動態網站開發實踐教程
- 盧欣欣 李靖主編
- 2510字
- 2021-09-17 17:55:52
2.3 流程控制語句
流程控制語句用于實現對程序流程的選擇、循環、跳轉等,流程控制語句對編程語言起著至關重要的作用,程序的執行流程直接決定最后的結果。在編碼時,只有清楚每條語句的執行流程,才能選擇合適的流程控制語句來實現想要的功能。合理的流程控制結構能夠使程序代碼更加清晰、減少代碼冗余,有利于提高開發效率。本節主要對PHP中的流程控制結構進行介紹。
2.3.1 選擇結構
選擇結構根據選擇條件的不同,執行不同的分支語句,從而得到不同的結果。例如,如果學生成績大于等于60,則該學生的成績及格;否則,成績不及格。如果淘寶用戶的積分在4~250之間,信用等級為“紅心”;在250~10000之間,信用等級為“藍鉆”等。
常用的選擇結構包括if條件語句和switch條件語句兩種。
1. if條件語句
在PHP中,if條件語句可細分為if、if…else、if…elseif…else三種。
(1)if語句
if語句的語法格式為

如果條件表達式的結果為真,則執行代碼塊。下面演示if語句的用法。
【例2-10】判斷成績是否及格。

運行結果為:

(2)if…else語句
if…else語句的語法格式為


if…else語句在條件表達式的結果為真時,執行代碼塊1;否則,執行代碼塊2。
【例2-11】輸出較大的數字。

運行結果為:

(3)if…elseif…else語句
if…else語句只能用于包含兩個分支結果的情況,當分支結果更多時,可以使用if…elseif…else語句,其中可以包含多個elseif,下面舉例說明該結構的用法。
【例2-12】判斷會員積分等級。
某電商網站根據用戶積分數量共設定四個會員等級:積分不超過1000分為普通會員,積分大于1000分且不超過5000分為黃金會員,積分大于5000分且不超過10000分為鉑金會員,積分大于10000分為超級會員。現有一用戶積分為3000分,判斷其會員等級,代碼如下。

運行結果為:

2. switch語句
當表達式的值可以進行列舉時,也可以采用switch語句,其語法格式為

2.3.1 switch語句


switch語句根據變量或者表達式的值,從上往下依次與每個case后面的常量值進行比較,直至找到與變量或表達式相等的常量,進而執行該分支下的語句塊。如果沒有滿足的case分支時,則執行default分支。需要注意的是:一般每個case分支的語句塊后面都會帶一個break語句,否則,執行完當前case后,會繼續執行下一個case分支。
【例2-13】判斷用戶角色。
在線考試系統中支持三種角色登錄,分別是管理員、教師、學生,不同的角色登錄后看到的系統頁面不同,能夠使用的功能也不盡相同。使用switch語句可以根據角色不同,顯示不同的頁面。在實際應用中,可通過數字標識不同角色,本例中分別用數字0、1、2代表管理員、教師、學生角色。

運行結果為:

2.3.2 循環結構
對于一些需要反復執行且有規律的代碼,可以采用循環結構進行編寫。循環結構能夠使代碼結構更加清晰,有效減少重復代碼。循環結構包含for、while、do…while三種形式。
1. for循環
當循環次數固定時,一般采用for循環結構。for循環結構的語法格式為

2.3.2 for循環

初始化表達式只在第一次循環開始前無條件執行一次。結束條件表達式在每次循環開始前計算一次值,如果值為true,則繼續循環并執行循環代碼塊;否則,終止循環。迭代表達式在每次循環后執行一次。
【例2-14】求100~1000之間的自然數之和。

運行結果為:

for循環語句還可以結合條件語句實現更加復雜的功能,例2-15演示在for循環中使用if語句的情況。
【例2-15】打印考場座位號。
在英語四級考試中,每個考場可以安排30名同學,考務人員在打印考場座位號時,每行可以放置5個考試座位號,輸出一個考場中的座位號排列順序,主要代碼如下。

運行結果如圖2-5所示。

圖2-5 打印考場座位號
有時,只用一層循環語句可能無法實現想要的功能,需要在循環體語句中繼續使用循環語句,即“循環嵌套”。例2-16演示循環嵌套的用法。
【例2-16】考場設置。
全國研究生考試需要占用X考點的教學樓,教學樓共4層,每層6間教室,一樓教室編號依次為:101、102、103……,對應考場編號為01、02、03……;二樓教室編號依次為201、202、203……,對應考場編號為07、08、09……,依次類推。打印教室編號和考場編號的對應關系。
由于上述題目中既包含樓層、每個樓層還包含多間教室,只用一層循環無法實現,可以使用雙層循環解決該問題,代碼如下。

上述代碼中$i代表層數,$j代表第$j間教室,教室編號由$i、0、$j三部分拼接而成;$n代表考場序號,由于存在個位數的考場序號,對$n進行格式化處理后,得到考場編號$num。運行結果如圖2-6所示。

圖2-6 考場分布圖
2. while循環
while循環根據循環條件的真假決定是否執行循環體,語法格式為

while循環在每次循環前會先判斷循環條件,如果條件為真,則執行代碼塊;否則跳出循環。
【例2-17】一張紙的厚度大約是0.1毫米,假設這張紙可以無限次對折,計算對折幾次可以超過珠峰(8844.43米)。

運行結果為:

3. do…while循環
do…while循環是while循環的變種。在do…while循環中,無論循環條件是否為真,都會至少執行一次代碼塊。do…while循環的語法格式為

【例2-18】依次輸出累加和不大于10的自然數。

在上述例子中,$num用來代表自然數,初值為0,$sum代表自然數之和,初值為0。循環條件為“$sum<= 10”。在循環體中,先輸出自然數,然后讓自然數遞增1,并累加到$sum中。運行結果為:

【例2-19】while和do…while的區別。


例2-19

在上述左右兩個代碼塊中:$n的初值相同,循環條件和循環體也相同。while循環首先判斷循環條件是否成立,由于條件不滿足,因此不執行循環體;do…while循環先執行循環體,再判斷循環條件是否成立,雖然條件不成立,但是也執行了一次循環體。
4. 循環跳出語句
只要循環條件成立,循環語句便會一直執行下去。如果希望在循環過程中跳出循環,可以采用循環跳出語句。PHP循環跳出語句包括break和continue兩種。
break語句可以直接跳出for、while和do…while循環,需要特別注意的是:當有多層循環嵌套時,break語句只能跳出離得最近的一層循環。
【例2-20】判斷給定數字是否為素數。

運行結果為:

在上述例子中,在2~$num/2區間內只要發現一個可以整除該數字的自然數,即可證明該數字不是素數,程序也沒必要繼續執行下去,所以用break語句直接跳出for循環。
此外,PHP也支持在break后面接收一個數字參數來決定跳出幾重循環,該參數不能大于最大的循環嵌套層數。例如,下面代碼表示跳出最近3層循環。

continue語句只能跳出本次循環,并繼續進入下一次循環。下面舉例說明continue的用法。
【例2-21】輸出10以內的奇數。

運行結果為:

continue后面也可以接收一個可選的數字參數來決定跳過幾層循環的當前次循環。例如,下列代碼表示跳過最近3層循環的當前循環。

- Python for Secret Agents:Volume II
- Django開發從入門到實踐
- HTML5+CSS3網站設計教程
- 深入淺出RxJS
- Apex Design Patterns
- TradeStation交易應用實踐:量化方法構建贏家策略(原書第2版)
- SAP BusinessObjects Dashboards 4.1 Cookbook
- 深入淺出PostgreSQL
- 區塊鏈技術與應用
- 匯編語言編程基礎:基于LoongArch
- Java程序設計案例教程
- UI設計全書(全彩)
- R Data Science Essentials
- Simulation for Data Science with R
- Android系統下Java編程詳解