官术网_书友最值得收藏!

3章 流程控制語句

視頻講解:51分鐘

學習了PHP基礎后,相信讀者對PHP語言的基本運算有了一些了解,那么現在試著計算下面幾個問題:輸出10以內的偶數、計算100的階乘、列舉1000以內的所有素數。本章就來學習使用PHP語言中的流程控制語句解決上述問題。PHP的流程控制語句有兩種:條件控制語句和循環控制語句。合理使用這些控制結構可以使程序流程清晰、可讀性強,從而提高程序開發效率。

學習摘要:

if語句

switch語句

for循環語句

while循環語句

do…while循環語句

跳轉語句

3.1 條件控制語句

視頻講解

在生活中,我們總是要做出許多決策,程序也是一樣。下面給出幾個常見的例子:

如果購買成功,用戶余額減少,用戶積分增多。

如果輸入的用戶名和密碼正確,提示登錄成功,進入網站,否則,提示登錄失敗。

如果用戶使用微信登錄,則使用微信掃一掃;如果使用QQ登錄,則輸入QQ號和密碼;如果使用微博登錄,則輸入微博號和密碼;如果使用手機號登錄,則輸入手機號和密碼。

以上例子中的判斷,就是程序中的條件控制語句。按照條件選擇執行不同的代碼片段。條件控制語句主要有if、if…else、if…elseif…else和switch 4種。下面分別進行講解。

3.1.1 if語句

PHP的if語句的格式如下:

如果表達式的值為真,那么就順序執行語句;否則,就會跳過該條語句,再往下執行。如果需要執行的語句不止一條,那么可以使用“{}”,在“{}”中的語句被稱為語句組,其格式如下:

if語句的流程就像一輛運行的火車,從A站出發,可以直接到達C站,也可以經過B站,然后再到達C站,如圖3.1所示。

圖3.1 if語句流程控制圖

【例3.01】 使用rand()函數生成一個隨機數$num,然后判斷這個隨機數是不是偶數,如果是,則輸出結果。代碼如下:(實例位置:資源包\源碼\03\3.01)

運行結果如圖3.2所示。

圖3.2 判斷隨機數是否為偶數

說明

rand()函數的作用是取得一個隨機的整數,每次刷新頁面后,會生成一個新的隨機數,可能與圖3.2所示不同。

3.1.2 if…else語句

大多時候,總是需要在滿足某個條件時執行一條語句,而在不滿足該條件時執行其他語句。這時可以使用if…else語句,該語法格式如下:

該語句的含義為:當表達式的值為真時,執行語句1;如果表達式的值為假,則執行語句2。就像一輛運行的火車,只有兩條軌道可以選擇,如圖3.3所示。

圖3.3 if…else語句流程控制圖

3.1.3 elseif語句

if…else語句只能選擇兩種結果:要么執行語句1,要么執行語句2。但有時會出現兩種以上的選擇,例如,一個班的考試成績,如果是90分以上,則為“優秀”;如果是60~90分的,則為“良好”;如果低于60分,則為“不及格”。這時可以使用elseif語句來執行,語法格式如下:

elseif語句的流程就像一輛運行的火車,從A站出發到達B站,有多條線路可以選擇,根據鐵路局的不同指示,選擇相應的路線,如圖3.4所示。

圖3.4 elseif語句的流程控制圖

【例3.02】 通過elseif語句,判斷今天是這個月的上、中或下旬。代碼如下:(實例位置:資源包\源碼\03\3.02)

運行結果如圖3.5所示。

圖3.5 判斷是上、中或下旬

3.1.4 switch語句

雖然elseif語句可以進行多種選擇,但如果條件較多時,就會變得十分煩瑣。為了避免if語句過于冗長,提高程序的可讀性,可以使用switch分支控制語句。switch語句的語法格式如下:

switch語句根據變量或表達式的值,依次與case中常量表達式的值相比較,如果不相等,繼續查找下一個case;如果相等,就執行對應的語句,直到switch語句結束或遇到break為止。一般來說,switch語句最終都有一個默認值default,如果在前面的case中沒有找到相符的條件,則輸出默認語句,和else語句類似。

【例3.03】 明日學院網站支持第三方登錄,第三方登錄包括QQ登錄、微信登錄、微博登錄等。根據不同的登錄方式,需要調用相應的第三方接口,這時,可以根據網址中傳遞的值不同,使用switch語句判斷用戶選擇了哪一個第三方應用,然后調用該應用的接口。代碼如下:(實例位置:資源包\源碼\03\3.03)

運行結果如圖3.6所示。

圖3.6 switch多重判斷語句

注意

switch語句在執行時,即使遇到符合要求的case語句段,也會繼續往下執行,直到switch語句結束。為了避免這種浪費時間和資源的行為,一定要在每個case語句段后加上break語句。這里break語句的意思是跳出當前循環,在3.3.1節中將詳細介紹break語句。

3.2 循環控制語句

視頻講解

對于大多數人來說,反復地做同樣的事情會讓人厭煩,但是對計算機而言,它們卻非常擅長去完成重復的任務。計算機程序通常會周而復始地重復同樣的步驟,這稱為循環。循環主要有兩種類型:

重復一定次數的循環,稱為計數循環,如for循環。

重復直至發生某種情況時結束的循環,稱為條件循環(conditional loop),因為只要條件為真,這種循環會一直持續下去,如while循環和do…while循環。

3.2.1 for循環語句

for循環是PHP的計數循環結構,它的語法格式如下:

其中,初始化表達式在第一次循環時無條件取一次值;條件表達式在每次循環開始前求值,如果值為真,則執行循環體里面的語句,否則跳出循環,繼續往下執行;迭代表達式在每次循環后被執行。for循環語句的流程控制圖如圖3.7所示。

圖3.7 for循環語句的流程控制圖

我們以現實生活中的例子來理解for循環的執行流程。在體育課上,體育老師要求同學們沿著環形操場跑步3圈。老師從0開始計數,每次跑完1圈,將數量加1。當完成第3圈時,同學會停下來,即循環結束。

【例3.04】 通過for循環來計算100的階乘,即1×2×3×4×…×100。代碼如下:(實例位置:資源包\源碼\03\3.04)

上述代碼中,第一步,執行for循環的初始表達式,即為$i賦值為1。第二步,判斷條件表達式,即$i是否小于或等于100,如果判斷的結果為真,則執行下面的程序塊,將$sum乘以當前的$i;否則跳出循環,不再繼續執行。第三步,執行迭代表達式,即將$i加1。此時,第一次循環結束,$i的值為2。然后判斷$i是否小于或等于100,重復第一次的操作。當$i為100時,執行第100次程序塊代碼。然后$i繼續迭代,值為101。此時,判斷表達式的結果為假,循環結束,不再執行。運行結果如圖3.8所示。

圖3.8 for循環計算階乘

注意

在for語句中當采用循環變量遞增或遞減的方式時,一定要保證循環能夠結束,無期限的循環(死循環)將導致程序崩潰。

3.2.2 while循環語句

while循環是PHP中條件循環語句的一種,它的語法格式如下:

當表達式的值為真時,將執行循環體內的PHP語句。執行結束后,再返回到表達式繼續進行判斷。直到表達式的值為假,才跳出循環。

while循環語句的流程控制圖如圖3.9所示。

圖3.9 while語句的流程控制圖

我們同樣以沿著操場跑步的例子來理解while循環。這一次,老師沒有要求同學們跑幾圈,而是要求當聽到老師吹的哨子聲時就停下來。同學們每跑一圈,可能會請求一次老師吹哨子。如果老師吹哨子,則停下來,即循環結束;否則,繼續跑步,即執行循環。

【例3.05】 依次判斷1~10以內的數是否為偶數,如果是,則輸出;如果不是,則繼續下一次循環。代碼如下:(實例位置:資源包\源碼\03\3.05)

運行結果如圖3.10所示。

圖3.10 while循環輸出10以內的偶數

3.2.3 do…while循環語句

while語句還有另一種形式的表示,即do…while。兩者的區別在于,do…while要比while語句多循環一次。當while表達式的值為假時,while循環直接跳出當前循環;而do…while語句則是先執行一遍程序塊,然后再對表達式進行判斷。do…while語句的流程控制圖如圖3.11所示。

圖3.11 do…while循環語句的流程控制圖

依然以沿著操場跑步的例子來理解do…while循環。這一次,老師要求同學們先跑1圈,然后當聽到老師吹的哨子聲時再停下來。

【例3.06】 分別使用while語句和do…while語句執行相同的代碼塊,即使用echo語句輸出一段內容,并對比兩個語句的區別。代碼如下:(實例位置:資源包\源碼\03\3.06)

運行結果如圖3.12所示。

圖3.12 while和do…while的區別

3.3 跳轉語句

視頻講解

當循環條件一直滿足時,程序將會一直執行下去,就像一輛迷路的車,在某個地方不停地轉圓圈。如果希望在中間離開循環,也就是for循環結束計數之前,或者while循環找到結束條件之前,用以下兩種方法來做到。

break:完全中止循環。

continue:直接跳到循環的下一次迭代。

3.3.1 break語句

break語句可以終止當前的循環,包括while、do…while、for和switch在內的所有控制語句。以獨自一人沿著操場跑步為例,計劃跑步10圈。可是在跑到第2圈時,遇到自己的女神或者男神,于是果斷停下來,終止跑步,這樣就提前終止循環。

【例3.07】 使用一個while循環,while后面的表達式的值為true,即為一個無限循環。在while程序塊中聲明一個隨機數變量$tmp,只有當生成的隨機數等于10時,使用break語句跳出循環。代碼如下:(實例位置:資源包\源碼\03\3.07)

運行結果如圖3.13所示。

圖3.13 break語句退出循環

3.3.2 continue語句

continue語句的作用沒有break強大,continue只能終止本次循環而進入到下一次循環中,continue也可以指定跳出幾重循環。

以獨自一人沿著操場跑步為例,計劃跑步10圈。當跑到第2圈一半的時候,遇到自己的女神或者男神也在跑步,于是果斷停下來,跑回起點等待,制造一次完美邂逅,然后從第3圈開始繼續。

【例3.08】 使用for循環輸出0~4,當$i等于2時,執行continue語句,此時不執行下面的print語句,跳出該循環,繼續執行$i等于3的語句。代碼如下:(實例位置:資源包\源碼\03\3.08)

運行結果如圖3.14所示。

圖3.14 continue語句跳出循環

3.4 小結

本章通過幾個簡單的數學題學習了PHP的流程控制語句。流程控制語句是程序中必不可少的,也是變化最豐富的技術。無論是入門的數學公式,還是高級的復雜算法,都是通過這幾個簡單的語句來實現的。相信讀者學習完本章之后,通過不斷地練習和總結,能夠掌握一套自己的方法和技巧。

3.5 實戰

3.5.1 驗證高斯定理

實例位置:資源包\源碼\03\實戰\01

使用for循環驗證高斯求和1+2+3+…+100之和。運行結果為5050,如圖3.15所示。

圖3.15 實例運行結果

3.5.2 輸出三角形金字塔

實例位置:資源包\源碼\03\實戰\02

輸出一個形狀呈三角形的金字塔。該金字塔共5行,第1行1顆星,第2行3顆星,第3行5顆星,第4行7顆星,第5行9顆星。運行結果如圖3.16所示。

圖3.16 實例運行結果

3.5.3 將學生成績轉化為等級

實例位置:資源包\源碼\03\實戰\03

將學生成績轉化為等級,劃分標準如下:

①優秀:大于等于90分。

②良好:大于等于80分,小于90分。

③及格:大于等于60分,小于80分。

④不及格:小于60分。

使用rand()函數隨機生成成績,輸出與該成績對應的等級。運行結果如圖3.17所示。

圖3.17 實例運行結果

主站蜘蛛池模板: 长垣县| 邯郸县| 巴林右旗| 忻州市| 益阳市| 桂平市| 绩溪县| 开封市| 信丰县| 钦州市| 晋州市| 灌阳县| 阿拉善左旗| 阿克| 天津市| 新和县| 都昌县| 舒城县| 诏安县| 禄丰县| 乌兰浩特市| 汉源县| 英吉沙县| 建昌县| 穆棱市| 海晏县| 滦南县| 五寨县| 阳高县| 陇南市| 临澧县| 咸宁市| 舞钢市| 凤庆县| 德化县| 旺苍县| 徐闻县| 保靖县| 名山县| 绿春县| 涟水县|