任何 PHP 腳本都是由一系列語句構(gòu)成的羊精。一條語句可以是一個賦值語句斯够,一個函數(shù)調(diào)用,一個循環(huán)喧锦,甚至一個什么也不做的(空語句)條件語句读规。語句通常以分號結(jié)束。此外,還可以用花括號將一組語句封裝成一個語句組和泌。語句組本身可以當(dāng)作是一行語句儒喊。本章講述了各種語句類型。
在任何一門程序設(shè)計語言中枪汪,都需要支持滿足程序結(jié)構(gòu)化所需要的三種基本結(jié)構(gòu):
- 順序結(jié)構(gòu)
- 分支結(jié)構(gòu)(選擇結(jié)構(gòu))
- 循環(huán)結(jié)構(gòu)
順序結(jié)構(gòu):在程序結(jié)構(gòu)中,最基本的就是順序結(jié)構(gòu)怔昨。程序會按照自上而下的順序執(zhí)行雀久。
分支結(jié)構(gòu)
單一條件分支結(jié)構(gòu)(if)
基本格式:
if(條件表達式){
語句組;
//語句組為單條語句時可省略“{ }”。
}
當(dāng)條件表達式的值為真(true)時趁舀,PHP將執(zhí)行語句組赖捌,相反條件表達式的值為假(false)時,PHP將不執(zhí)行語句組矮烹,忽略語句組執(zhí)行下面的語句越庇。
<?php
if ($a > $b)
echo "a 大于 b"; //如果變量a的值大于b的值則會輸出:a大于b
$x=10;
$y=20;
if($x<$y){ //判斷是否x小于y。多條語句需要使用{ }括起來奉狈。
$t=$x;
$x=$y;
$y=$t;
}
var_dump($x>$y); //輸出:bool(true)
?>
雙向條件分支結(jié)構(gòu)(else從句)
格式如下
if(條件表達式){
語句組1
}else{
語句組2
}
if-else 條件判斷與 if 條件判斷類似卤唉,所不同的是,if-else 語句的條件表達式值為真(true)時仁期,會執(zhí)行 if 的本體語句(語句組1)桑驱,而條件表達式值為假(false)時竭恬,則執(zhí)行 else 的本體語句(語句組2)。
多向條件分支結(jié)構(gòu)(elseif子句)
格式如下
if(條件表達式1){
語句塊1
}elseif(條件表達式2){
語句塊2
... ...
}elseif(條件表達式n){
語句塊n
}else{
語句塊n+1
}
<?php
date_default_timezone_set("Etc/GMT-8"); //設(shè)置時區(qū)熬的,中國大陸采用東八區(qū)的時間
echo "當(dāng)前時間".date("Y-m-d H:i:s",time())." "; //通過date()函數(shù)獲取當(dāng)前時間痊硕,并輸出
$hour = date("H"); //獲取服務(wù)器時間中當(dāng)前的小時,作為分時問候的條件
if( $hour < 6 ) { //如果當(dāng)前時間在6點以前押框,執(zhí)行下面的語句塊
echo "凌晨好!";
} elseif ( $hour < 9 ) { //如果當(dāng)前時間在6點之后和9點以前岔绸,執(zhí)行下面的語句塊
echo "早上好!";
} elseif ( $hour < 12 ) { //如果當(dāng)前時間在9點之后和12點以前,執(zhí)行下面的語句塊
echo "上午好!";
} elseif ( $hour < 14 ) { //如果當(dāng)前時間在12點之后和14點以前强戴,執(zhí)行下面的語句塊
echo "中午好!";
} elseif ( $hour < 17 ) { //如果當(dāng)前時間在14點之后和17點以前亭螟,執(zhí)行下面的語句塊
echo "下午好!";
} elseif ( $hour < 19 ) { //如果當(dāng)前時間在17點之后和19點以前,執(zhí)行下面的語句塊
echo "傍晚好!";
} elseif ( $hour < 22 ) { //如果當(dāng)前時間在19點之后和22點以前骑歹,執(zhí)行下面的語句塊
echo "晚上好!";
} else { //如果當(dāng)前時間在22點之后和次日1點以前预烙,執(zhí)行下面語句塊
echo "夜里好!";
}
多向條件分支結(jié)構(gòu)(switch語句)
語句語法:
switch(表達式){
case 值1:
語句序列1; break道媚;
case 值2:
語句序列2扁掸; break;
…
default:
語句序列 n最域; break谴分;
}
當(dāng)程序執(zhí)行碰到switch條件判斷時,它會取出鍵值镀脂,然后與語句體中的case所列出的值逐一比較牺蹄,如果數(shù)值不符合,則將數(shù)值往下一個case傳遞薄翅,如果數(shù)值符合沙兰,則執(zhí)行case中的語句,然后再碰到break語句即跳出switch條件判斷翘魄,如果所有的值比對都不符合鼎天,則會執(zhí)行default中的語句 。
switch語句使用注意事項:
switch語句與if語句不同暑竟,它僅能判斷一種關(guān)系:是否恒等斋射。
switch語句中case子句的常量可以是整型常量、字符型常量但荤、表達式或變量罗岖。
在同一個switch中,case子句的常量不能相同腹躁,否則第二個值永遠無法匹配到桑包。
case 和 default 子句后面的語句序列允許由多個可執(zhí)行語句組成,且不必用“{ }”括起來潜慎,也可以為空語句捡多。
switch語句中可省略break語句和default子句。但省略后會改變流程铐炫。
<?php
$week = date("D");
switch( $week ) {
case "Mon": echo "星期一"; break;
case "Tue": echo "星期二"; break;
case "Wed": echo "星期三"; break;
case "Thu": echo "星期四"; break;
case "Fri": echo "星期五"; break;
case "Sat": echo "星期六"; break;
case "Sun": echo "星期日"; break;
}
switch( $i ) { //條件表達式是一個變量$i
case 2: //和值2匹配時垒手,沒有break,將控制轉(zhuǎn)移到下一個case中的語句
case 3: //和值3匹配時倒信,執(zhí)行下面的語句塊
echo "\$i和值2或3任一個匹配";
break; //退出switch語句
case 4: //和值為3匹配上時科贬,執(zhí)行下面的語句塊
echo "\$i和值4匹配時,才會執(zhí)行";
break; //退出switch語句
default: //匹配任何和其他case都不匹配的情況, 要放在最后一個case之后
echo "\$i沒有匹配的值時鳖悠,才會執(zhí)行";
}
巢狀條件分支結(jié)構(gòu)
語法:
if(表達式1){
if(表達式2){
.. .. ..
}else{
.. .. ..
}
}else{
if(表達式3){? …
}
}
巢狀式條件分支結(jié)構(gòu)就是if語句的嵌套榜掌,即指if或else后面的語句塊中又包含if語句。if語句可以無限層地嵌套在其他if語句乘综,這給程序的不同部分的條件執(zhí)行提供了充分的彈性憎账。
巢狀式if..else流程控制使用范例:
<?php
$a=88;
echo "數(shù)學(xué)成績: $A <p>";
if($a>=60){
if($a>=70){
if($a>=90){
echo "不錯喔!!這次數(shù)學(xué)成績甲等!!";
}else{
echo "還可以...這次數(shù)學(xué)成績乙等!!";
}
}else{
echo "勉勉強強及格邊緣...這次數(shù)學(xué)成績丙等!!";
}
}else{
echo "有待下次努力...數(shù)學(xué)成績不及格!!";
}
?>
循環(huán)結(jié)構(gòu)
while語句
while循環(huán)語法:
while(表達式){
語句或語句序列
... ...
}
當(dāng)while循環(huán)語句中表達式(循環(huán)控制語句)的結(jié)果為真時,程序?qū)⒎磸?fù)執(zhí)行同一段程序:循環(huán)體( while中的語句或語句序列)卡辰,直到滿足一定的條件(表達式的結(jié)果為假時)后才停止執(zhí)行該段程序胞皱。
實例:
<?php
//求1到100的累加。
$i=1;
$sum=0;
while($i<=100)
{
$sum+=$i;
$i++;
}
echo $sum;
?>
嘗試一下吧
<html>
<head><title>使用while循環(huán)嵌套輸出表格</title></head>
<body>
<table align="center" border="1" width=600>
<caption><h1>使用while循環(huán)嵌套輸出表格</h1></caption>
<?php
$out = 0; //外層循環(huán)需要計數(shù)的累加變量
while( $out < 10 ) { //指定外層循環(huán)九妈,并且循環(huán)次數(shù)為10次
$bgcolor = $out%2 == 0 ? "#FFFFFF" : "#DDDDDD";
echo “<tr bgcolor=”.$bgcolor.“>”; //執(zhí)行一次則輸出一行并指定背景顏色
$in = 0; //內(nèi)層循環(huán)需要計數(shù)的累加變量
while( $in < 10 ) { //指定內(nèi)層循環(huán)反砌,并且循環(huán)次數(shù)為10次
echo "<td>".($out*10+$in)."</td>"; //執(zhí)行一次,輸出一個單元格
$in++; //內(nèi)層的計數(shù)變量累加
}
echo "</tr>"; //輸出行關(guān)閉標(biāo)記
$out++; //外層的計數(shù)變量累加
}
?>
</table>
</body>
</html>
do...while循環(huán)
基本格式:
do{
語句或語句序列
... ...
}while(表達式)萌朱;
程序會先執(zhí)行 do 語句體中的語句(循環(huán)體)宴树,然后再檢查表達式(循環(huán)控制語句)的值,如果符合條件式(值為真)晶疼,就再進行 do 語句體中的語句酒贬,直到條件不符合為止
注意:
do-while 后面必須加上分號作為結(jié)束
do-while與while的最大區(qū)別是先執(zhí)行循環(huán)體然后再判斷循環(huán)的控制條件
<?php //求1到100的累加。
$i=1; ?$sum=0;
do{
$sum+=$i;
$i++;
}while($i<=100);
echo $sum;
?>
for循環(huán)
基本格式:
for(表達式1;表達式2;表達式3)
{
語句或語句序列;
}
for循環(huán)語句中表達式1為循環(huán)初始條件冒晰;表達式2為循環(huán)控制條件同衣;表達式3為控制變量遞增;語句或語句序列為循環(huán)體壶运。
<?php
//使用花括號“{}”將代碼塊括起來耐齐,通常代碼塊為一條時可以不加花括號
for( $i = 1; $i <= 10; $i++ ) {
echo "這是第<b> $i </b>次循環(huán)執(zhí)行輸出的結(jié)果<br>";
}
$i = 1; //將for語句中第一部分初始化提出來,放到for前面執(zhí)行蒋情,但for語句中的分號要保留
for( ; $i <= 10; $i++ ) {
echo "這是第<b> $i </b>次循環(huán)執(zhí)行輸出的結(jié)果<br>";
}
$i = 1; //再將第三部分的增量提出來埠况,放到for語句的執(zhí)行體最后,但也要將分號保留
for( ; $i <= 10; ) {
echo "這是第<b> $i </b>次循環(huán)執(zhí)行輸出的結(jié)果<br>";
$i++;
}
$i = 1;
for( ; ; ) {
if( $i > 10 )
break;
echo "這是第<b> $i </b>次循環(huán)執(zhí)行輸出的結(jié)果<br>";
$i++;
}
特殊的流程控制語句
- break
我們之前在 switch 條件判斷中已經(jīng)使用過 break 關(guān)鍵字棵癣,它會使得程序流程離開 switch 本體中的語句辕翰,如果 break 使用在 for、while 或 do-while 循環(huán)結(jié)構(gòu)中時狈谊,將會使得程序離開該層循環(huán)喜命。 - continue
continue 的作用與 break 有點類似沟沙,continue 若使用在 for、while 或 do-while循環(huán)結(jié)構(gòu)中壁榕,當(dāng)程序執(zhí)行至 continue 時矛紫,之后的語句將直接被略過,而直接執(zhí)行下一次的循環(huán)動作牌里。
- exit
當(dāng)前的腳本中只要執(zhí)行到exit語句颊咬,而不管它在哪個結(jié)構(gòu)中都會直接退出當(dāng)前腳本。exit是一個函數(shù)牡辽,當(dāng)前使用過的die( )函數(shù)就是exit( )的別名喳篇。可以帶參數(shù)輸出一條消息态辛,并退出當(dāng)前腳本麸澜。
Have a try
- 四種9X9乘法表(for循環(huán))
- 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數(shù)字因妙。例如2+22+222+2222+22222(此時共有5個數(shù)相加)痰憎,幾個數(shù)相加由鍵盤控制。(while循環(huán))