在做網(wǎng)站中,任何PHP腳本都是由一系列語(yǔ)句構(gòu)成的。一條語(yǔ)句可以是一個(gè)賦值語(yǔ)句,一個(gè)函數(shù)調(diào)用,一個(gè)循環(huán),一個(gè)條件語(yǔ)句或者是一個(gè)什么也不做的空語(yǔ)句。語(yǔ)句通常以分號(hào)結(jié)束,用戶可以使用大括號(hào)將一組語(yǔ)句封裝成一個(gè)語(yǔ)句組。語(yǔ)句組本身可以當(dāng)作是一行語(yǔ)句。本節(jié)將重點(diǎn)介紹PHP流程控制結(jié)構(gòu)和語(yǔ)句,這里主要包括條件語(yǔ)句和循環(huán)語(yǔ)句。
if條件語(yǔ)句
if結(jié)構(gòu)是很多語(yǔ)言(包括PHP在內(nèi))最重要的特性之一,它允許按照條件執(zhí)行代碼片段。PHP的if結(jié)構(gòu)和C語(yǔ)言相似。
<?phpif (expr) statement?>
如果表達(dá)式expr的值為true,PHP將執(zhí)行statement,如果值為false,將忽略statement。例如,在下面示例中,如果$a大于$b,則將顯示"a大于b"。
<?phpif($a > $b) echo "a 大于b";?>
經(jīng)常需要按照條件執(zhí)行不止一條語(yǔ)句,當(dāng)然并不需要給每條語(yǔ)句都加上一個(gè)if子句??梢詫⑦@些語(yǔ)句放入語(yǔ)句組中。例如,如果$a大于$b,則將顯示"a大于b",并且將$a的值賦給$b。
<?phpif ($a > $b) { echo "a大于b"; $b = $a;}?>
if語(yǔ)句可以無(wú)限層地嵌套在其他if語(yǔ)句中,這給程序的不同部分的條件執(zhí)行提供了充分的彈性。
else條件語(yǔ)句
用戶經(jīng)常需要設(shè)計(jì)在滿足某個(gè)條件時(shí)執(zhí)行一條語(yǔ)句,而在不滿足該條件時(shí)執(zhí)行其他語(yǔ)句,這正是else語(yǔ)句的功能。else延伸了if語(yǔ)句,可以在if語(yǔ)句中的表達(dá)式的值為false時(shí)執(zhí)行語(yǔ)句。例如,在下面示例中,如果$a大于$b時(shí),顯示"a大于b",反之則顯示"a不大于b"。
<?phpif ($a > $b) { echo "a大于b";} else { echo "a不大于b";}?>else
語(yǔ)句僅在if以及elseif語(yǔ)句中的表達(dá)式的值為false時(shí)執(zhí)行。
else if條件語(yǔ)句
else if與else條件語(yǔ)句一樣,它延伸了if語(yǔ)句,可以在原來(lái)的if表達(dá)式值為false時(shí)執(zhí)行不同語(yǔ)句。但是與else不一樣的是,它僅在else if的條件表達(dá)式值為true時(shí)執(zhí)行語(yǔ)句。例如,在下面示例中,如果$a大于$b時(shí),顯示"a大于b",如果相等,則顯示"a等于b",都不成立則顯示"a小于b"。
<?phpif ($a > $b) { echo "a大于b";} elseif ($a == $b) { echo "a等于b";} else { echo "a小于b";}?>
在同一個(gè)if結(jié)構(gòu)中可以有多個(gè)elseif語(yǔ)句。第一個(gè)表達(dá)式值為true的elseif語(yǔ)句(如果有的話)將會(huì)執(zhí)行。在PHP中,也可以寫成elseif,它和else if語(yǔ)句的行為完全一樣。句法分析的含義有少許區(qū)別,elseif的語(yǔ)句僅在之前的if或elseif的表達(dá)式值為false,而當(dāng)前的elseif表達(dá)式值為true時(shí)執(zhí)行。
注意:elseif與else if只有在使用大括號(hào)的情況下才認(rèn)為是完全相同。
switch條件語(yǔ)句
elseif語(yǔ)句可以設(shè)計(jì)多重選擇,但是比較繁瑣,為了避免if語(yǔ)句的冗長(zhǎng)結(jié)構(gòu),用戶可以使用switch語(yǔ)句簡(jiǎn)化編程。switch語(yǔ)句適合于這樣的環(huán)境:當(dāng)需要把同一個(gè)變量(或表達(dá)式)與很多不同的值比較,并根據(jù)它等于哪個(gè)值來(lái)執(zhí)行不同的代碼。
<?phpswitch ($i) { case 0: echo "i= 0"; break; case 1: echo "i=1"; break; case 2: echo "i=2"; break;}?>
switch語(yǔ)句是一行接一行地執(zhí)行,開(kāi)始時(shí)沒(méi)有代碼被執(zhí)行,僅當(dāng)一個(gè)case語(yǔ)句中的值和switch表達(dá)式的值匹配時(shí),PHP才開(kāi)始執(zhí)行語(yǔ)句,直到switch的程序段結(jié)束或者遇到第一個(gè)break語(yǔ)句為止。如果不在case的語(yǔ)句段最后寫上break的話,PHP將繼續(xù)執(zhí)行下一個(gè)case中的語(yǔ)句段。如:
<?phpswitch ($i) { case 0: echo "i=0"; case 1: echo "i=1"; case 2: echo "i=2";}?>
如果$i等于0,PHP將執(zhí)行所有的輸出語(yǔ)句,如果$i等于1,PHP將執(zhí)行后面兩條輸出語(yǔ)句,只有當(dāng)$i等于2時(shí),才會(huì)得到預(yù)期的結(jié)果,只顯示“i=2”。所以,別忘了break語(yǔ)句很重要。
在switch語(yǔ)句中條件只求值一次,并用來(lái)與每個(gè)case語(yǔ)句比較。而在elseif語(yǔ)句中條件會(huì)再次求值。如果條件比較復(fù)雜,或者在一個(gè)很多次的循環(huán)中,那么選用switch語(yǔ)句可能會(huì)快一些。在一個(gè)case中的語(yǔ)句也可以為空,這樣只不過(guò)將控制轉(zhuǎn)移到了下一個(gè)case中的語(yǔ)句。如:
<?phpswitch ($i) { case 0: case 1: case 2: echo "i<3"; break; case 3: echo "i=3";}?>
default語(yǔ)句比較特殊,它匹配其他case都不匹配的情況。如:
<?phpswitch ($i) { case 0: echo "i=0"; break; case 1: echo "i=1"; break; case 2: echo "i=2"; break; default: echo "i不是0、1、2";}?>
case表達(dá)式可以是任何求值為簡(jiǎn)單類型的表達(dá)式,即整型或浮點(diǎn)數(shù)以及字符串,不能是數(shù)組或?qū)ο螅撬鼈儽唤獬贸蔀楹?jiǎn)單類型。同時(shí),PHP還允許使用分號(hào)(;)代替case語(yǔ)句后的冒號(hào)(:),如:
<?phpswitch($i){ case 1; case 2; case 3; echo "i=3"; break; default; echo '…';}?>
注意:與其他語(yǔ)言不同,在switch結(jié)構(gòu)中,continue語(yǔ)句作用類似于break語(yǔ)句。如果在循環(huán)中有一個(gè)switch結(jié)構(gòu)并希望continue到外層循環(huán)中的下一個(gè)輪回,可以使用continue語(yǔ)句。