PHP的流程控制之分支語句
PHP的流程控制之循環語句
4.3.5 流程控制語句
幾乎在所有的編程語言中,程序都(dōu)由3種(zhǒng)基本的結構組成(chéng),即順序結構、分支結構和循環結構。
程序是由若幹語句組成(chéng)的,如果程序中語句的執行順序是從上到下依次逐句執行的,那麼(me)這(zhè)個程序的結構就是順序結構,在這(zhè)種(zhǒng)結構中沒(méi)有分支和反複,這(zhè)也是最簡單、最常見的流程結構,這(zhè)裡(lǐ)就不再過(guò)多地讨論。
PHP中提供了4條流程控制語句來實現分支結構和循環結構。
①if…else… 條件語句
②switch 分支選擇語句
③do…while… 循環語句
④for 循環語句
此外PHP還(hái)提供了break語句和continue語句,用以跳出分支結構或循環結構,下面(miàn)對(duì)這(zhè)些語句逐一進(jìn)行詳細的介紹。
4.3.5.1 分支控制語句
一、if…else…語句
if…else…語句共有3種(zhǒng)基本結構,此外每種(zhǒng)基本結構還(hái)可以嵌套另外兩(liǎng)種(zhǒng)結構,而且還(hái)允許多級嵌套。
1. 隻有if的語句
這(zhè)種(zhǒng)結構可以當作單純的判斷,可解釋成(chéng)“若某條件成(chéng)立則去做什麼(me)事(shì)情”,其語法如下:
if(expr){
statement
}
其中的expr爲判斷的條件表達式,通常都(dōu)爲比較表達式或邏輯表達式,而statement表示符合條件時執行的語句,若statement所代表的語句隻有一行,可以省略大括号{}。如果expr爲真,則執行statement語句或語句體。
2.if…else…語句
這(zhè)種(zhǒng)結構可解釋成(chéng)“若某條件成(chéng)立則去做什麼(me)事(shì)情,否則去做另一件事(shì)情”,其語法如下:
if(expr){
statement1
}else{
statement2
}
如果expr爲真,則執行statement1語句或語句體,否則執行statement2語句或語句體。
3. 包含else if的語句
前面(miàn)的兩(liǎng)種(zhǒng)分支結構隻能(néng)實現二路分支,用包含else if的語句則可以實現多路分支,其語法如下:
if(expr1){
statement1
}
else if(expr2){
statement2
}
else if…
else{
statementn
}
當expr1爲真時,執行statement1語句或語句體,否則轉入expr2的判斷,如果expr2爲真,則執行statement2語句或語句體,依此類推,如果所有的expr表達式都(dōu)不爲真,則執行statementn語句或語句體。
程序4-18.php爲if…else…語句應用示例.
<!--文件4-18.php:if…else…的應用--> <HTML> <HEAD> <TITLE>if…else…的應用</TITLE> </HEAD> <BODY> <?php //本程序測試時,請更改測試服務器的系統時間查看效果 echo "今天是:".date("D")."<br>"; if (date("D")=="Sat") echo "周末了,我們要去狂歡。<br>"; if (date("D")=="Sat"){ echo "再次聲明,周末了,我們要去狂歡,好(hǎo)高興!<br>"; }else{ echo "今天不是周末,我們要學(xué)習PHP 5,多麼(me)有意義啊!^_^!!!<br>"; } if (date("D")=="Sun"){ echo "今天是星期天。"; } else if (date("D")=="Mon"){ echo "今天是星期一。"; } else if (date("D")=="Tue"){ echo "今天是星期二。"; } else if (date("D")=="Wed"){ echo "今天是星期三。"; } else if (date("D")=="Thu"){ echo "今天是星期四。"; } else if (date("D")=="Fri"){ echo "今天是星期五。"; } else{ echo "今天是星期六(隻可能(néng)是星期六了^_^)。"; } ?> </BODY> </HTML>
程序4-18中的tate()函數是格式化服務器的時間函數,date("D")返回服務器時間的星期時間中的英文的前3個字符。當系統時間不爲星期六時,其運行結果如圖4-14所示.
圖4-14 程序4-18.php的運行結果
在上述3種(zhǒng)基本結構中,如果在statement語句體中還(hái)有if…else…語句,就構成(chéng)if…else…語句的嵌套。
二、switch語句
嵌套的if…else…語句可以處理多分支流程,但使用起(qǐ)來比較繁瑣而且也不太清晰,爲此PHP中又引進(jìn)了switch語句。其語法如下:
switch (expr) {
case expr1:
statement1;
break;
case expr2:
statement2;
break;
┆
┆
default:
statementN;
break;
}
其中的expr爲條件,通常是變量名稱。而case後(hòu)的exprN,通常表示變量的值。冒号後(hòu)則爲符合該條件要執行的語句。一定要注意break的作用爲退出switch結構,千萬不能(néng)省略不寫。具體使用如程序4-19.php所示。
<!--文件4-19.php:switch的應用--> <HTML> <HEAD> <TITLE>switch的應用</TITLE> </HEAD> <BODY> <?php //本程序測試時,請更改測試服務器的系統時間查看效果 echo "今天是:".date("D")."<br>"; switch (date("D")) { case "Mon": echo "今天星期一"; break; case "Tue": echo "今天星期二"; break; case "Wed": echo "今天星期三"; break; case "Thu": echo "今天星期四"; break; case "Fri": echo "今天星期五"; break; default: echo "今天放假"; break; } ?> </BODY> </HTML>
程序4-19.php的運行效果如圖4-15所示。
圖4-15 程序4-19.php的運行結果
通過(guò)比較,不難發(fā)現例4-19.php要比例4-18.php簡單一些,最主要的是程序清晰。
4.3.5.2 循環控制語句
一、do…while…語句
在PHP中,do…while…循環語句有兩(liǎng)種(zhǒng)結構,一種(zhǒng)隻有while…部分,另一種(zhǒng)是do…while…兩(liǎng)部分都(dōu)有。
1. 隻有while…部分的語句
其語法如下:
while (expr) {
statement
}
2.do…while…兩(liǎng)部分都(dōu)有的語句
其語法如下:
do {
statement
} while (expr);
其中的expr爲判斷的條件,通常爲邏輯表達式或比較表達式。而statement爲符合條件的執行部分程序,若程序隻有一行,可以省略大括号{}。
兩(liǎng)種(zhǒng)結構的區别在于:前者是先判斷條件再執行語句,後(hòu)者是先執行語句再判斷條件。對(duì)于expr開(kāi)始爲真的情況,兩(liǎng)種(zhǒng)結構是沒(méi)有區别的。如果expr開(kāi)始爲假,則前者不執行任何語句就跳出循環,而後(hòu)者仍要執行一次循環才能(néng)跳出循環。
具體使用如程序4-20.php所示。
<!--文件4-20.php:do…while…的應用--> <HTML> <HEAD> <TITLE>do…while…的應用</TITLE> </HEAD> <BODY> <?php //本程序測試時,請將(jiāng)兩(liǎng)處$i的初始值改爲爲4後(hòu)再測試一次 //觀察結果,分析區别 $i=1; while($i<=3){ print $i ; echo ". 以後(hòu)不敢了<br> "; } echo "第二次……<br>"; $i=1; do{ print $i ; echo ". 以後(hòu)不敢了<br> "; } while($i<=3) ?> </BODY> </HTML>
由于網頁解析的原因,頁面(miàn)無法顯示兩(liǎng)個加号,同學(xué)們在編寫代碼的時候要注意不要漏寫。
其運行效果如圖4-16所示。
圖4-16 $i初值爲1時,程序4-20.php的運行結果
圖4-16 $i初值爲4時,程序4-20.php的運行結果
當我們把第10行和16行更改爲“$i=4;”後(hòu),其運行效果如圖4-16所示,這(zhè)樣就不難看出兩(liǎng)種(zhǒng)循環結構的區别了。
二、for語句
for語句僅有單純的一種(zhǒng),沒(méi)有其他變化,但同時也是最複雜、功能(néng)最強大的循環語句任何while循環和do…while…循環都(dōu)可以用for循環代替。For語句的語法如下:
for(expr1;expr2;expr3){
statement
}
其中expr1爲條件的初始值,expr2爲判斷的條件,通常都(dōu)是用比較表達式或邏輯表達式作爲判斷的條件,expr3爲執行statement後(hòu)要執行的部分,即循環步長(cháng),可以用來改變條件,供下次的循環判斷,如將(jiāng)循環變量加1、減1等。statement爲符合條件後(hòu)執行的語句或語句體,若statement隻有一條語句組成(chéng),則可以省略大括号{}。
程序的主體部分可以用for循環改寫如下:
<?php
for ($i=1;$i<=3;$i ){
echo $i.". 以後(hòu)不敢了<br>";
}
?>
當然還(hái)可以改寫成(chéng)以下幾種(zhǒng)形式:
<?php
$i=1;
for (;$i<=10;$i ){
echo $i.". 以後(hòu)不敢了<br>";
}
?>
(由于網頁解析的原因,頁面(miàn)無法顯示兩(liǎng)個加号,同學(xué)們在編寫代碼的時候要注意不要漏寫。)
或
<?php
for ($i=1;;$i ){
if ($i>10) break; //循環标志結束,跳出循環
echo $i.". 以後(hòu)不敢了<br>";
}
?>
或
<?php
for ($i=1;$i<=10;){
echo $i.". 以後(hòu)不敢了<br>";
$i ;
}
?>
可以明顯地看出用for語句和用while語句的不同。實際應用上中,若循環有初始值,且循環過(guò)程中都(dōu)要累加(或累減),則使用for循環比用while循環好(hǎo)。
由于網頁解析的原因,頁面(miàn)無法顯示兩(liǎng)個加号,同學(xué)們在編寫代碼的時候要注意不要漏寫。
4.3.5.3 break和continue語句
在switch和for語句的例子中都(dōu)用到了break語句,它的作用就是跳出整個switch分支結構或for循環結構,執行其下面(miàn)的語句。而continue經(jīng)常用在for或do…while…循環語句中,表示跳出本次循環,繼續進(jìn)入下一次循環。這(zhè)也是break和continue的主要區别,如程序4-21.php所示。
<!--文件4-21.php:break/continue的應用--> <HTML> <HEAD> <TITLE>break/continue的應用</TITLE> </HEAD> <BODY> <?php echo"使用break的輸出效果:<br>"; $i=0; while ($i<10) { if ($i%2==1) { break; } echo $i; $i ; } echo "<br>使用contine的輸出效果:<br>"; for($i=0;$i<10;$i ){ if ($i%2){ continue; } echo $i." "; } ?> </BODY> </HTML>
程序4-21.php運行結果如圖4-18所示。
圖4-18 程序4-21.php的運行結果
PHP 提供了一些流程控制的替代語法,包括 if,while,for,foreach 和 switch。替代語法的基本形式是把左花括号({)換成(chéng)冒号(:),把右花括号(})分别換成(chéng) endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。
switch 和第一個 case 之間的任何輸出(含空格)將(jiāng)導緻語法錯誤。例如,這(zhè)樣是無效的: <?php switch ($foo): ?> <?php case 1: ?> ... <?php endswitch ?>
看了視頻才知道(dào) PHP還(hái)提供了break語句和continue語句,用以跳出分支結構或循環結構 非常的實用
在switch和for語句的例子中都(dōu)用到了break語句,它的作用就是跳出整個switch分支結構或for循環結構,執行其下面(miàn)的語句。而continue經(jīng)常用在for或do…while…循環語句中,表示跳出本次循環,繼續進(jìn)入下一次循環。這(zhè)也是break和continue的主要區别
邏輯性好(hǎo)強,