任何 PHP 腳本都是由一系列語句構成的。一條語句可以是一個賦值語句,一個函數調用,一個循環,一個條件語句或者甚至是一個什么也不做的語句(空語句)。語句通常以分號結束。此外,還可以用花括號將一組語句封裝成一個語句組。語句組本身可以當作是一行語句。本篇文章將記錄流程控制的學習過程。
目錄
一、條件語句
1、if 語句
2、if...else 語句
3、if...elseif...else 語句
4、switch 語句?
4.1、break 關鍵字
4.2、default 關鍵字
4.3、公共代碼塊
二、循環
1、while 循環
2、do...while 循環
3、for 循環
4、foreach 循環
三、break 語句
四、continue 語句
一、條件語句
- if?語句 - 如果某個條件為真,則執行一些代碼。
- if...else?語句 - 如果一個條件為真,則執行一些代碼,如果該條件為假,則執行另一段代碼。
- if...elseif...else?語句 - 對兩個以上的條件執行不同的代碼。
- switch?語句 - 選擇要執行的多個代碼塊之一。
1、if 語句
if 結構是很多語言包括 PHP 在內最重要的特性之一,它允許按照條件執行代碼片段。
語法
if (expr) {// 如果 expr 的值為 true,執行此處的代碼;
}
示例
$a = 5;
$b = 1;
if ($a > $b) {echo "a > b";
}
if 語句可以使用邏輯運算符進行多個條件的檢查。
$month = 3;
if ($month == 1 || $month == 2 || $month == 3) {echo "$month 月是第一季度";
}
?if 語句可以無限層地嵌套在其它 if 語句中,這給程序的不同部分的條件執行提供了充分的彈性。
$a = 10;
$b = 8;
$c = 6;
if ($a > $b) {echo "a 大于 b";if ($a > $c) {echo "<br>";echo "a 也大于 c";}
}
2、if...else 語句
?
經常需要在滿足某個條件時執行一組語句,而在不滿足該條件時執行其它語句,這正是 else 的功能。else 延伸了 if 語句,可以在 if 語句中的表達式的值為 false 時執行語句。
語法
if (expr) {// 如果 expr 的值為 true,執行此處的代碼;
} else {// 如果 expr 的值為 false,執行此處的代碼,else 語句不是必需的;
}
示例
$a = 8;
$b = 10;
if ($a > $b) {echo "a 大與 b";
} else {echo "a 不大于 b";
}
3、if...elseif...else 語句
elseif,是 if 和 else 的組合。和 else 一樣,它延伸了 if 語句,可以在原來的 if 表達式值為 false 時執行不同語句。但是和 else 不一樣的是,它僅在 elseif 的條件表達式值為 true 時執行語句。在一個 if 語句中可以有多個 elseif,其中將會執行第一個表達式值為 true(如果有的話)的 elseif。
語法
if (expr1) {// 如果 expr1 的值為 true,執行此處的代碼;
} elseif (expr2) {// 如果 expr1 的值為 false,expr2 的值為 true,執行此處的代碼;
} elseif (expr3) {// 如果 expr1 和 expr2 的值都為 false,expr3 的值為 true,執行此處的代碼;
}
...
else {// 如果上面的條件都為 false,執行此處的代碼;
}
示例
$score = 80;
if ($score >= 90) {echo "優秀";
} elseif ($score >= 80) {echo "良好";
} elseif ($score >= 60) {echo "及格";
} else {echo "不及格";
}
elseif 的語句僅在之前的 if 和所有之前 elseif 的表達式值為 false,并且當前的 elseif 表達式值為 true 時執行。
4、switch 語句?
switch 語句類似于具有同一個表達式的一系列 if 語句。很多場合下需要把同一個變量(或表達式)與很多不同的值比較,并根據它等于哪個值來執行不同的代碼。
語法
switch (表達式) {case 標簽 1:// 代碼塊;break;case 標簽 2:// 代碼塊;break;case 標簽 3:// 代碼塊;break;...default:// 代碼塊;
}
- 表達式只計算一次;
- 將表達式的值與每個 case 的值進行比較;
- 如果找到匹配項,則執行相關聯的代碼塊;
- break?關鍵字會跳出 switch 塊;
- 如果沒有匹配項,則執行?default?代碼塊。
示例
$season = "spring";
switch ($season) {case "spring":echo "春天";break;case "summer":echo "夏天";break;case "autumn":echo "秋天";break;case "winter":echo "秋天";break;default:echo "輸入有誤";
}
4.1、break 關鍵字
遇到 break 關鍵字時,它會跳出 switch 塊。這將停止執行更多代碼,并且不再測試更多 case。最后一個塊不需要 break,因為該塊無論如何都會結束。
注意:如果不在 case 的語句段最后寫上 break,則 PHP 將繼續執行下一個 case 中的語句段。即使評估結果與 case 不匹配,下一個 case 也將被執行!
?接下來,我們將上面 switch 示例中 case "spring" 代碼中的 break 移除,看一下會產生什么效果?
$season = "spring";
switch ($season) {case "spring":echo "春天";case "summer":echo "夏天";break;case "autumn":echo "秋天";break;case "winter":echo "秋天";break;default:echo "輸入有誤";
}
執行輸出“春天夏天”。由此可以驗證,當沒有 break 語句后,將會執行下一個 case 中的語句段,即使 case 不匹配。所以注意不要缺失 break 語句,以免造成邏輯錯誤。
4.2、default 關鍵字
default?關鍵字指定了在沒有 case 匹配時要執行的代碼。default?不是必需的。
$season = "chuntian";
switch ($season) {case "spring":echo "春天";case "summer":echo "夏天";break;case "autumn":echo "秋天";break;case "winter":echo "秋天";break;default:echo "輸入有誤";
}
執行輸出“輸入有誤”。由于 case 都沒有得到匹配,則執行 default 語句塊中的語句。
4.3、公共代碼塊
如果想讓多個 case 使用相同的代碼塊,將 case 中的語句置為空,這樣就將控制轉移到了下一個 case 中的語句。
示例
$month = 6;
switch ($month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:echo "每月有31天";break;case 4:case 6:case 9:case 11:echo "每月有30天";break;case 2:echo "平年有28天,閏年有29天";break;default:echo "出錯了";
}
二、循環
- while?- 只要指定條件為真,就循環代碼塊。
- do...while?- 執行代碼塊一次,然后只要指定條件為真,就重復循環。
- for?- 循環代碼塊指定的次數。
- foreach?- 對數組中的每個元素循環代碼塊。
1、while 循環
while 語句的含意很簡單,它告訴 PHP 只要 while 表達式的值為 true 就重復執行嵌套中的循環語句。表達式的值在每次開始循環時檢查,所以即使這個值在循環語句中改變了,語句也不會停止執行,直到本次循環結束。如果 while 表達式的值一開始就是 false,則循環語句一次都不會執行。
語法
while (expr) {// 如果 expr 為 true,循環執行此處的代碼;如果 expr 為 false,則退出循環
}
示例
// 輸出 1~10
$i = 1;
while ($i <= 10) { // 當 $i <= 10 時,輸出 $i 的值echo $i;echo "<br>";$i++; // 每次循環更改 $i 的值,在現有值的基礎上加1
}
注意:需要更改條件判斷的值,否則循環將永遠繼續。通常將永遠執行的循環叫做死循環,要盡量避免死循環的出現。
while?循環不會運行特定次數,而是在每次迭代后檢查條件是否為真,以此來判斷是否執行下次循環。
2、do...while 循環
do...while 循環和 while 循環非常相似,區別在于表達式的值是在每次循環結束時檢查而不是開始時。和一般的 while 循環主要的區別是 do...while 的循環語句保證會執行一次(表達式的真值在每次循環結束后檢查),然而在 while 循環中就不一定了(表達式真值在循環開始時檢查,如果一開始就為 false 則整個循環立即終止)。
語法
do {// 如果 expr 為 true,循環執行此處的代碼;如果 expr 為 false,則退出循環;此處代碼在開始時必定執行一次
} while (expr);
示例
$i = 10;
do {echo $i;echo "<br>";$i--;
} while ($i < 5);
// 即使條件為 false,但是循環還是執行了一次
3、for 循環
for?循環 - 循環代碼塊執行指定的次數。
語法
for (expr1; expr2; expr3) {// 代碼塊;
}
- 第一個表達式(expr1)在循環開始前無條件求值(并執行)一次。
- expr2 在每次循環開始前求值。如果值為 true,則繼續循環,執行循環語句。如果值為 false,則終止循環。
- expr3 在每次循環之后被求值(并執行)。
- 每個表達式都可以為空或包括逗號分隔的多個表達式。表達式 expr2 中,所有用逗號分隔的表達式都會計算,但只取最后一個結果。expr2 為空意味著將無限循環下去。
示例
// 輸出 1~10
for ($i = 1; $i <= 10; $i++) {echo $i . "<br>";
}
4、foreach 循環
foreach 語法結構提供了遍歷數組的簡單方式。foreach 僅能夠應用于數組和對象,如果嘗試應用于其他數據類型的變量,或者未初始化的變量將發出錯誤信息。foreach 循環在本篇文章中不做使用說明,在之后的數組篇章中說明如何使用。
三、break 語句
break 語句結束執行當前的 for、foreach、while、do...while、switch 結構。
break 接受一個數字的可選參數,決定跳出幾重循環。默認值是 1,僅僅跳出最近一層嵌套結構。
$i = 0;
while (++$i) {switch ($i) {case 5:echo "At 5<br />\n";break 1; /* 只退出 switch. */case 10:echo "At 10; quitting<br />\n";break 2; /* 退出 switch 和 while 循環 */default:break;}
}
四、continue 語句
continue 在循環結構用用來跳過本次循環中剩余的代碼并在條件求值為真時開始執行下一次循環。
continue 接受一個可選的數字參數來決定跳過幾重循環到循環結尾。默認值是 1,即跳到當前循環末尾。
// 輸出 1~10 中的偶數
for ($i = 1; $i <=10; $i++) {if ($i % 2 == 1) { // 跳過奇數continue;}echo $i . "<br>";
}