PHP的流程控制之分支語句
PHP的流程控制之循環語句
4.3.5 流程控制語句
又黑 幾乎在所有的編程語言中,程序都(dōu)由3種(zhǒng)老短基本的結構組成(chéng),即順序結習暗構、分支結構和循環結構。
&nbs說習p;程序是由若幹語句組成(chéng)的,如果拿朋程序中語句的執行順序是從上到下依次逐句執行的,那麼(me)這(zhè)個動舞程序的結構就(jiù)是順序結構,在這(zhè)種(zhǒng)結構中沒(民理méi)有分支和反複,這(zhè)自好也是最簡單、最常見的流程結構,這(zhè)裡(lǐ)就(jiù)電訊不再過(guò)多地讨論。
&nb妹術sp; PHP中提供了4條流程控制語句來實現分如妹支結構和循環結構。
①外件if…else… &那放nbsp; &nb笑為sp; 條件語句
②swi光在tch &她師nbsp; &nbs河房p;  子湖;  低北; 分內道支選擇語句
&nb和房sp; ③do…while… &nb看也sp; 循環語句
 喝如; ④for &n金道bsp;  化司; &nbs月小p; &nb煙站sp; 循環離地語句
此外PHP還(h音哥ái)提供了break語句和continue語句,用以跳能書出分支結構或循環結構,下面(m為行iàn)對(duì)這(zhè)些語句逐一進離廠(jìn)行詳細的介紹。
4.3.5.1 分支控制語句 化新;
一、if…else…語句
&nbs愛音p; 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){
 高遠; stateme林民nt
}
其中的exp科火r爲判斷的條件表達式,通常都(dōu)爲金美比較表達式或邏輯表達式,而sta城腦tement表示符合條件時(shí)森數執行的語句,若statemen會讀t所代表的語句隻有一行,可以省略大括号{}個討。如果expr爲真,則執行statement語句歌身或語句體。
2.if…else…語句
&放紅nbsp;這(zhè)種(zhǒng)結構可呢做解釋成(chéng)“若某條件成(chéng)立則去做什麼(me)事年上(shì)情,否則去做另一件事(shì)情”,其語法如下:
if(expr){
&n唱公bsp; &nb理日sp; 技厭 statement1
}else{
用窗 s短校tatement2
}
如果expr爲真,則明我執行statement1語句或語句體,否間熱則執行statement2語句或語句體。
3. 包含else if的語句
前面(miàn)的吃計兩(liǎng)種(zhǒng)分支結構隻能(néng)實現二路作門分支,用包含else if的語句則可以實現多路分支,其語法如下:
if(expr1){
內科 statemen暗民t1
}
else if(expr2){
&n日可bsp; &n美雪bsp; stateme鄉土nt2
}
else if…
else{
statementn
}
當expr1爲真時(笑計shí),執行statement1語句或語句體,否則轉入expr2你紅的判斷,如果expr2爲真,則得銀執行statement2語句或語句體,依此這師類推,如果所有的expr表達式都(dōu)不爲真,則執行s門影tatementn語句或語句體。
程序4-18.php爲if…答微else…語句應用示例.
<!--文件4-18.p算兒hp:if…else…的應用--購月> <HTML> <HEAD&黑什gt; &nbs但信p;<TITLE>if…else…的電月應用</TITLE> </HEAD> <兒場BODY> <我爸;?php &nbs男一p; 高子//本程序測試時(shí),請更改測試服務器的系統時(shí)間訊坐查看效果 &nbs店女p; echo&喝數nbsp;"今天是:".da看報te("D")."物土<br>"; &nb匠視sp; &nbs愛畫p;if (date("D&q司說uot;)=="Sat") 志子 &n腦房bsp; echo老北 "周末了,服裡我們要去狂歡。<br>";和制 &n城銀bsp; if (date(&qu頻相ot;D")=="Sat"){ &n南作bsp; &nbs作兒p; ec樂服ho "再次聲明,周末了文讀,我們要去狂歡,好(hǎo)高興!<br>"店放;; &nbs海微p; }間資else{ &nb說器sp;  也從; &nb訊這sp; echo "今天不是計的周末,我們要學(xué)習PHP&得輛nbsp;5,多麼(me)有意兵內義啊!^_^!!!<br>"; 大坐 &好綠nbsp; } &n計的bsp; &nbs鐵些p; if (date("D&舞光quot;)=="Sun&q兵學uot;){ &nbs作店p;  內請; echo "今天是星很理期天。"; &nbs理北p; }去個 &nb秒關sp; 多理else if (date("D"報農)=="Mon&quo遠低t;){ &很票nbsp; 吃從 頻草echo "今天是星期一。";月錢 &nbs錢子p; }  光用; else&n草電bsp;if (date("D章很")=="Tue"){ 煙一  機中; 店少 echo "今天是星期二低做。"; &nb動就sp; &弟白nbsp; } &nbs新錢p; &nb票如sp; else if&錯線nbsp;(date("D"業醫;)=="Wed&q你街uot;){ &影工nbsp;  高好; echo "今天是星期三。&q相習uot;; &nbs資輛p; &都錯nbsp; } &動月nbsp; &n裡道bsp; else if匠花 (date("D")=="紙購;Thu"){ &nbs這紅p; &綠日nbsp; 人黑 echo "今天是星期四。";玩在 &但北nbsp; &nb鐵熱sp; } &美長nbsp;  電鐵;else if&nb銀道sp;(date("D")=="Fri去農"){ &知好nbsp; &nbs友也p; e高腦cho "今天是間頻星期五。"; &開了nbsp; &nbs金間p; } &nb員什sp; &道們nbsp; else{ &nb們笑sp; &nbs相區p; &冷暗nbsp; echo 哥下"今天是星期六(隻可能(néng)是為哥星期六了^_^)。"; 畫男 } 會懂 ?> </B影我ODY> </HTML>
程序4-18中的tate()函數是格式化服務器的時(shí)間函數,date(&下都quot;D")返回服務器時(shí雜光)間的星期時(shí)間中的英文的前物玩3個字符。當系統時(shí)間不爲星期六時(shí),其運廠照行結果如圖4-14所示.
圖4-14 程序4-舊員18.php的運行結果
在上述3種(zhǒ多時ng)基本結構中,如果在statement語句體中還(hái)商的有if…else…語句,就(jiù少得)構成(chéng)if…else…語句的嵌套。校匠
二、switch語句
嵌套的i唱黑f…else…語句可以處理多分支流程,廠體但使用起(qǐ)來比較繁瑣而且也不太清晰,爲此PHP中又引進(jì件笑n)了switch語句。其語法照雨如下:
switch (expr) {
 金到; case expr1這光:
&人術nbsp; &在術nbsp; &nbs唱笑p; sta不理tement1;
坐水 &有術nbsp; 公花 brea她冷k;
現黑 case exp那一r2:
校嗎 分低 s白湖tatement2;
 又妹; &nbs子電p; &n能購bsp; break;
日男  制工; ┆
嗎線 &n但房bsp; ┆
&nb爸能sp;  看西; default:
 著湖; 小著  街視;  門湖;statementN;
&n南畫bsp; &nbs事資p;  體票; break;
}
其中的expr爲條件,通土動常是變量名稱。而case後(hòu)的exprN,通常鐘山表示變量的值。冒号後(hòu)則爲符合該條件要執動媽行的語句。一定要注意break的作用爲退出sw中視itch結構,千萬不能(néng)省略不寫。具體使用如程序4-19.朋對php所示。
<!--文件4-19.ph坐些p:switch的應用--> <HTML> <技新HEAD> &nbs謝分p; <TITLE>s綠離witch的應用</TITLE> </H中遠EAD> <BODY>  綠窗; <?php &nb窗相sp; &n劇廠bsp;  見信; //本程序測試時(s女醫hí),請更改測試服務器的系統時(shí)間查看效果  呢門; &nb影跳sp; echo&n畫用bsp;"今天是:".date(&q弟見uot;D")."<br>&qu好動ot;; 為民 swi有分tch (date("D")) 子答{ &n吧身bsp; &nbs個作p; &司黑nbsp; case "Mon&書章quot;: &nb鐵錯sp; &技對nbsp; echo&n低著bsp;"今天星期一";  商地; &nbs相人p;  讀視; brea員農k; &nb工醫sp; &nbs子窗p; case 綠輛;"Tue": &n資如bsp; 國筆 echo &朋區quot;今天星期二"; &nb中業sp; &nb吧老sp; break;  醫離; &nbs術能p; &nbs視問p; case "朋明Wed":  得匠; 畫數 echo "藍師;今天星期三"; 說朋 &n站山bsp; brea事照k; &還高nbsp;  熱地; &nbs木鄉p;case "輛間;Thu": 信司 &n費輛bsp; 這睡 echo "今天星期四"; 市上 &n子費bsp; &n煙玩bsp; 女暗 b鐵機reak; &n我內bsp; 亮相 case&n人志bsp;"Fri":  數也;  白為; &nbs雪體p; echo "今天星期五&quo明山t;; &nb算森sp; &現是nbsp; bre作又ak; &nb草得sp; &nb好理sp; de吧拿fault: &nbs火場p; &nb慢機sp; &nbs做信p; echo&nb舞跳sp;"今天放假";  女個; &nb他船sp; &話是nbsp; break; 信森 &n自生bsp;} &nb明物sp; ?> </BODY> <海信;/HTML>
程序4-19.php的運行效果如圖4-15所示。
圖4-15 程序4-19.php的運行結果
通過(guò)比較,不難發(fā)現例4-19.ph照工p要比例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) {
那車 &nbs南用p; statement
}
2.do…while…兩(liǎng)部分都(dōu)有的語句
其語法如下:
do {
 師她;  機我; stat議中ement
} while (expr);
 歌知; 其中的expr爲判斷的條件,通常爲邏輯表達式或比較到金表達式。而statement爲符合條件的執行部她道分程序,若程序隻有一行,可以省略大括号{}。
商爸兩(liǎng)種(zhǒng)結構的區别在于:前者是先判斷條件再習科執行語句,後(hòu)者是先執行語句再判斷條會在件。對(duì)于expr開(kāi)始爲真的情況,兩(liǎ一內ng)種(zhǒng)結構是沒(méi南近)有區别的。如果expr開(kāi)始爲假,則前者不執行任何語句就(jiù)跳子理出循環,而後(hòu)者仍要執行一次循環才從通能(néng)跳出循環。
具體使用如程序4-20.php所示。
<!--文件4-20.php:do…司厭while…的應用--> <H好下TML> <HEAD> 腦匠 <TITLE>do樂道…while…的應用</TITLE> </HEAD> 算熱<BODY> &開書nbsp; <?php  草校; &n話樂bsp; /雨村/本程序測試時(shí),請將(jiāng)兩(liǎng)歌中處$i的初始值改爲爲4後(hòu)再測試一次 &nbs什工p; //觀察結果河日,分析區别 &nbs視嗎p; 兒些 $i=1; &n秒空bsp; &見件nbsp; while($i<=3){ &n有近bsp; &都妹nbsp; &nbs舞空p; print&nbs話金p;$i ; &n科會bsp; &n暗現bsp; &制離nbsp; echo商土 ". 以後(hòu)不敢了<br廠議> "嗎笑;; 兵請 } &鐘技nbsp; &商美nbsp; echo技那 "第二次……<br>";明近 信鄉 $i=1; &nb懂門sp; &nb南就sp; do藍化{ &nbs購到p; &nbs我話p;  冷和;print $i 知樂 ; &物來nbsp; &nb東事sp; &n線得bsp; echo &quo村公t;. 以後(hòu)不敢了<br> &qu們計ot;; &n樂腦bsp; } while訊錢($i<=3) ?>子科; </BODY> </HTML>
由于網頁解析的原因,頁面(miàn)無法顯示兩(liǎng)個加号,同哥身學(xué)們在編寫代碼的時(shí)候要注意不要漏寫。
其運行效果如圖4-16所示。
圖4-16 $i初值爲1時(shí),程序4-20議科.php的運行結果
圖4-16 $i初值爲4時(shí),程序4-2村畫0.php的運行結果
作上 當我們把第10行和16行更改爲“$i=4;”後(hòu),和懂其運行效果如圖4-16所示,這(z內很hè)樣(yàng)就(jiù喝爸)不難看出兩(liǎng)種(zhǒng)區得循環結構的區别了。
二、for語句
白知 for語句僅有單純的一種(z從鐵hǒng),沒(méi)有其他變化,但同時(shí)也是最複雜、功能(草湖néng)最強大的循環語句任何while循金她環和do…while…循環都(d照還ōu)可以用for循環代替。For語句的語法如下:
for(expr1;expr2;expr3){
statement
}
&n一通bsp;其中expr1爲條件的初始值,expr2爲判斷的條件,通常都們身(dōu)是用比較表達式或邏輯表達式作爲判斷的條件,expr3爲購就執行statement後(hòu)要執行的部分,即循環步長(cháng),可姐我以用來改變條件,供下次的循環判斷,如將(j農請iāng)循環變量加1、減1等。statement吃街爲符合條件後(hòu)執行的語句或語句體,若statemen事湖t隻有一條語句組成(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 ){日讀
街放 e務雪cho $i.". 以後(hòu)不敢了那玩<br>";
紙鄉 }
?>
(由于網頁解析的原因,頁面(miàn)無法顯示兩(liǎng)個術明加号,同學(xué)們在編寫代碼的時(shí)秒內候要注意不要漏寫。)
或
<?php
for ($i=1;;$i 事動){
 照水; &nb她行sp; &nbs訊和p; if ($i>10) 科近 break; //循環标這男志結束,跳出循環
&n黃林bsp; &nb飛見sp; &nbs那又p; echo $i.&q有有uot;. 以後(hòu)不敢了<資西br>";
&他亮nbsp; }
?>
或
<?php
for ($i=1;$i<=10;){
&n遠藍bsp; &nbs黑弟p; echo $i.街就". 以後(hòu)不敢了<br>&吃木quot;;
&醫船nbsp; &n多北bsp; &n章公bsp; $i ;
&n在呢bsp; &nbs時拿p; }
?>
些雜 可以明顯地看出用for語句和很章用while語句的不同。實際應用上中,若循環有初始值,且循環過(光西guò)程中都(dōu)要累加(或累減),則使用朋內for循環比用while循環好(hǎo)。
由于網頁解析的原因,頁面(miàn)無法顯示兩(liǎng)個加号,同學(xué)們在樹海編寫代碼的時(shí)候要注意不要漏寫就房。
4.3.5.3 break和continue語句
&nb日信sp;在switch和for語句的例子地音中都(dōu)用到了break語句,它的作舊頻用就(jiù)是跳出整個switch議紙分支結構或for循環結構,執行其下面(miàn)的語句。而co司紅ntinue經(jīng)常用在for或do…wh日東ile…循環語句中,表示跳出本次循環,繼續進(jìn章喝)入下一次循環。這(zhè)也是break和continue的主要看討區别,如程序4-21.php所示。
<!--文件4-21.php:break/contin事業ue的應用--> <HTML> &笑店lt;HEAD> &n南體bsp;<TITLE>break/continue的應用間照</TITLE> </HEAD>些離 <BODY> &老城nbsp; <?php &n是空bsp; &nb日可sp; ec光購ho"使用break的輸出效果:<報下;br>"; &nbs歌低p; $i=0;微購 &nbs煙我p; &n朋輛bsp; while ($i們知<10) { &nb都間sp; &nbs輛厭p; if (數廠$i%2==1) { &nb笑唱sp; &厭請nbsp; 司明 &nbs厭得p;  街從;break; &nb森器sp;  暗刀; } &著得nbsp; 不錯  腦區; &nb短女sp; echo $i; &nb我站sp; &n了坐bsp; $i  相議;; &體師nbsp; &n新些bsp; } &nb在訊sp; 用術echo "來業<br>使用cont不些ine的輸出效果:<br>"; 爸對  作算; 微人 for($i=0;$i<10;$i &nbs白費p;){ &n低哥bsp; 愛還 if ($如個i%2){ &nb視日sp; 是紅  弟近; continu關開e; &n他線bsp; 兵鐵 &nbs很錯p;} 刀員  跳舞; echo 通來;$i." &quo嗎亮t;; &nb個舊sp; &nbs房匠p;} ?說山> </BODY> </HTML>
程序4-21.php運行結果如圖4-18所示。
圖4-18 程序4-21.p些可hp的運行結果
PHP 提供了一些流程控制的替代語法,包括 if,while,for,f唱拍oreach 和 switch。替代語法的基答著本形式是把左花括号({)換成(chéng)冒号(:),理樂把右花括号(})分别換成(ché媽物ng) endif;,endwh人妹ile;,endfor;,endforeach; 以及 e電業ndswitch;。
switch 和第一個 case 之間的任何輸出(含空格自報)將(jiāng)導緻語法錯誤。例如,這(zhè)樣(yàng)是無效的:訊技 <?php switch ($foo): ?&g兵風t; <?php case 1: ?>從站; ... <?php endswitch ?>
看了視頻才知道(dào) PHP還(影答hái)提供了break語句和continue語句,用以跳出有好分支結構或循環結構 非常的實用
在switch和for語句的例子中都(dōu)用到了break語句,它的作用就音相(jiù)是跳出整個switc做可h分支結構或for循環結構,執行其下面(miàn)的語句。而continu對愛e經(jīng)常用在for或do…whi書吃le…循環語句中,表示跳出本次循環,繼續進(jìn)錢海入下一次循環。這(zhè)也是break和con分來tinue的主要區别
邏輯性好(hǎo)強,