1.7 - 第一章:PHP基礎 - 流程控制

流程控制允許你控制你編寫的腳本流(Siemen注:通俗點說就是按照你的安排去執行程序)——畢竟,一個腳本從開始一直運行到結束,你沒有控制其運行走向與運行多少次數,那麼程序也不會知道下一步該怎麼做。

PHP提供了一些與與衆不同的流程控制——包括一些看似多餘,確實對簡化開發的。你應該要熟悉他們,把他們當作語言結構不可分割的部分。

1.7.1 條件控制

條件控制結構是被用來改變一個或者多個腳本執行流向的。最最基礎的結構就是if-then-else結構,能夠決定執行兩條語句中的哪個一條(或者把代碼塊插入到其中):

在這裏,如果“表達式1”爲true,那麼它下面的代碼塊中的代碼會被立即執行。如果沒有情況符合,解釋器會試圖執行else部分語句。需要提醒的是使用個連續的else if語句可以使用elseif來代替,他們是等價的。

那麼if-then-else也可以被嵌套使用:

有一個特殊的三元操作符允許你把if-then-else嵌入到一個表達式中去執行:

上面這行代碼與下面這段代碼效果是等價的:

正如你所見的那樣,這種三元操作符異常簡介——而且,合理的利用它可以是代碼更容易閱讀。那麼你可以想象得到,沒什麼比這個更加簡練了:可是過渡的使用會讓代碼難以理解並且影響運行效率,特別是採用連續嵌套的條件控制。

if-then-else的語法結構如果去連續判斷一個值的不同情況將會變得複雜。想象這個有時會看到的這類連續的if-then-else寫法:

這樣的代碼伴隨着一堆問題,首先,龐大的代碼量難於理解與維護。其次,$a中的值必須一次一次的去驗證條件——不過在本例中並不算太大的問題,如果需要判斷的是一個複雜的表達式,問題就大了。爲了緩解這些問題,PHP推薦使用switch結構:

使用switch來判斷一個表達式(本例中是$a),將其與逐個case值進行比較;如果表達式與case值比配則執行對應的語句直到遇到break就會跳出這個結構。需要提醒的是別忘記在case對應的語句末尾加上break——否則解釋器會繼續往下判斷其他的case值。最後如果沒有case值與其匹配,則解釋器會運行default裏的語句。

1.7.2 循環控制

Siemen注:原文翻譯叫做迭代結構,通俗起見就叫做循環控制。
循環控制提供了多次執行一段代碼的能力。PHP提供了四種控制結構,通常其中兩種是一門語言必須具備的。

最簡單的循環結構是while()和do…while()循環;循環開始後會不計次數的執行其中的代碼,直到給出的表達式爲假時纔會終止:

如你所見,這兩段循環非常類似;唯一的區別在於判斷條件的位置。在while()循環中,條件判斷會在每次循環開始的時候執行——也就是說如果條件判斷爲假,那麼循環中的語句將不會被執行。而在do…while()循環中,條件判斷放在了循環末尾——意思就是就算條件判斷爲假,至少代碼也執行了一次。

那麼for和foreach結構是高級的循環機制,提供比while()更多的控制力,並且更容易代碼理解:

與你看見的一樣,for循環聲明中有三個部分,每個部分之間使用分號間隔。第一部分包含了一條只在循環開始之前執行一次的指令(或者一系列多條指令,用逗號分隔)。第二部分包含了一個每次循環都會檢查是否爲真的條件,第三部分會在每次循環結束執行。因此下面這種寫法也是等價的:

作者提示:以上出現的PHP_EOL是預設常量,相當於當前系統的“end of line”。

與for類似的foreach結構,是針對一個數組才操作的,這部分會在數組章節中詳細介紹。

1.7.3 中斷與繼續

對於break這個關鍵字,我們在之前介紹swich的小節中已經遇到過了,這個關鍵字也可以被用來終端一個循環;將其嵌入循環中可以強制中斷循環繼續程序運行:

作者提示:記住如果break後面不帶參數的話記得加上分號。如果你沒有這麼做的話,如果這個break後面出現了表達式返回了一個整數,就有可能發生隨機的程序中斷——引起此種錯誤是很難排查的。

幸好有比break更好用的方法,當只是想要跳過當前循環的執行而繼續下一輪循環。你可以利用continue語句來幫完成——用起來就像break,你也可以在後面跟隨一個整數來說明你要跳過的循環屬於哪一層。下面例子中將只輸出0到3與5到9的數字:

 

修正:

2010年04月06日 —— Siemen

1. 所有代碼部分使用csdn代碼重新插入

發佈了19 篇原創文章 · 獲贊 5 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章