流程控制對於任何一門編程語言來說都是具有通用與普遍性的,是程序的重要組成部分。可以這么說,在任何一門程序設計語言中,都需要支持三種基本結構:順序結構、分支結構(選擇結構或條件結構)和循環結構。對於順序結構,主要是賦值語句和輸入/輸出語句等,即按次序執行,這里沒什么好說的。這里,筆者重點總結一下分支結構和循環結構。
分支結構
分支結構是程序在執行過程中依照需求條件來改變程序執行的順序。即滿足條件時就執行某一敘述塊,反之則執行另一敘述塊。在程序中使用分支結構可以有以下幾種形式:
- 單一條件分支結構
- 雙向條件分支結構
- 多向條件分支結構
- 巢狀條件分支結構
單一條件分支
if
結構是單一條件分支結構,if
語句的基本格式是對一個表達式進行計算,根據計算結果決定是否執行后面的語句。if
后面小括號中的“表達式”就是執行的條件,條件返回的結果只能是布爾型值。其通常是由比較運算符或者邏輯運算符組成的表達式所計算的結果值,或是一些返回布爾型的函數等。如果是傳入其他類型的值,也會自動轉換為布爾型的TRUE
或FALSE
。如果表達式為TRUE
,則執行代碼塊,否則不執行。
Demo
<?php
$x = 10; //定義一個整型變量$x,值為10
$y = 20; //定義一個整型變量$y,值為20
if ( $x < $y ) { //$x是小於$y的,所以執行下面語句塊
$t = $x ; //先將$x的值放到臨時的變量$t中
$x = $y ; //再將變量$y的值賦給變量$a
$y = $t ; //再將臨時變量$t中的值賦給變量$y
} //語句塊結束的花括號
var_dump($x > $y ); //兩個變量的值已經交換,輸出true
echo $x." ".$y;
?>
雙向條件分支
雙向條件分支好比if
語句中也可以包含else
子句,其意思是需要在滿足某個條件時執行一條語句,而在不滿足該條件時執行其他語句,這正是else
子句的功能。else
延伸了if
語句,可以在if
語句中的表達式的值為FALSE
時執行語句。值得注意的是,else
語句是if
語句的從句,必須和if
一起使用,不能單獨存在。
Demo
<?php
$x = 30;
$y = 20;
if( $x > $y ) {
echo "變量\$x 大於變量 \$y <br>"; //判斷的條件成立,此句會執行
} else {
echo "變量\$x 小於變量 \$y <br>"; //判斷的條件不成立,此句會被執行
}
echo "變量\$x和變量\$y比較完畢 ";
?>
多向條件分支
elseif
子句是典型的多向條件分支,它延伸了if
語句,elseif
子句會根據不同的表達式值確定執行哪個語句塊。在PHP中也可以將elseif
分開成兩個關鍵字else if
來使用。其執行順序是如果表達式l為TRUE
,則執行代碼塊1語句;如果判斷表達式2為TRUE
,則執行代碼塊2語句;以此類推,判斷第n
個表達式為TRUE
,則執行代碼塊n
語句;如果表達式的條件都不為TRUE,則執行else
子語中的代碼塊n+l
語句,當然最后的else
語句也可以省略。
Demo
<?php
$week = date("D"); //獲取當前的星期值,如Mon、Tue、Wed等
if ( $week == "Mon" ) {
echo "星期一";
} elseif ( $week == "Tue" ) {
echo "星期二";
} elseif ( $week == "Wed" ) {
echo "星期三";
} elseif ( $week == "Thu" ) {
echo "星期四";
} elseif ( $week == "Fri" ) {
echo "星期五";
} elseif ( $week == "Sat" ) {
echo "星期六";
} elseif ( $week == "Sun" ) {
echo "星期日";
}
?>
switch
語句和elseif
相似,也是一種多向條件分支結構,但if
和elseif
語句使用布爾表達式或布爾值作為分支條件來進行分支控制;而switch
語句則用於測試一個表達式的值,並根據測試結果選擇執行相應的分支程序,從而實現分支控制。switch
語句由一個選擇表達式和多個case
標簽組成,case
標簽后緊接着一段代碼塊。在使用switch
語句時應該注意以下幾點:
switch
語句后面的選擇表達式的數據類型只能是整型或字符串,不能是boolean
型。通常這個控制表達式是一個變量名稱。switch
語句后面的花括號是必須有的。case
語句的個數沒有規定,可以無限增加。但case
標簽和其后面的值之間應有一個空格,值后面必須有一個冒號,這是語法的一部分。switch
匹配完成以后,將依次逐條執行匹配的分支模塊中的語句,直到switch
結構結束或者遇到了break
語句才停止執行。switch
語句中default
標簽直接在后面加上一個冒號,其意思是是表達式的值不能與前面任何一個case
標簽后的值相等,這時才執行default分支中的語句。default標簽可以省略。
Demo
<?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;
}
?>
巢狀條件分支
巢狀式條件分支結構就是if
語句的嵌套,即指if
或else
后面的代碼塊中又包含if
語句。
Demo
<?php
$sex = "male"; //用戶輸入的性別
$age = 25; //用戶輸入的年齡
if ( $sex == "male" ) { //如果用戶輸入的是男性則執行下面的區塊
if ( $age >= 60 ) { //如果是男性並且年齡在60以上則執行下面的區塊
echo "這個先生已退休".($age-60)."年了";
} else { //如果是男性並且年齡在60以下則執行下面的區塊
echo "這個先生在工作,還有".(60-$age)."年才能退休";
}
} else { //如果用戶輸入的是女性則執行下面的區塊
if( $age >= 55 ) { //如果是女性並且年齡在55以上則執行下面區塊
echo "這個女士已退休".($age-55)."年了";
} else { //如果是女性並且年齡在55以下則執行下面區塊
echo "這個女士在工作,還有".(55-$age)."年才能退休";
}
}
?>