PHP 流程控制完全指南
🧠 一、什么是流程控制?
在編程中,流程控制是指控制程序執行順序的語句。它決定了代碼是“從上往下執行”,還是“根據條件跳轉”,或者“循環執行某些代碼”。
PHP 中的流程控制語句主要包括:
- 循環結構:
while
、do-while
、for
、foreach
- 條件結構:
if
、else
、elseif
、switch
、match
- 跳轉結構:
break
、continue
、goto
🔁 二、循環結構
1. while
循環
最簡單的循環結構,只要條件為 true
,就一直執行。
? 示例:
$i = 0;
while ($i < 5) {echo $i;$i++;
}
// 輸出:01234
📌 特點:
- 先判斷條件,再執行代碼塊。
- 如果條件一開始就是
false
,則代碼塊不會執行。
2. do-while
循環
先執行一次,再判斷是否繼續執行。
? 示例:
$i = 0;
do {echo $i;$i++;
} while ($i < 5);
// 輸出:01234
📌 特點:
- 至少執行一次代碼塊。
- 適合“至少做一次”的場景,比如用戶輸入驗證。
3. for
循環
適合已知循環次數的場景。
? 示例:
for ($i = 0; $i < 5; $i++) {echo $i;
}
// 輸出:01234
📌 三部分說明:
- 初始化:
$i = 0
- 條件判斷:
$i < 5
- 迭代操作:
$i++
4. foreach
循環(專為數組設計)
用于遍歷數組中的每一個元素。
? 示例:
$arr = [1, 2, 3, 4];
foreach ($arr as $value) {echo $value;
}
// 輸出:1234
🧠 使用引用時注意:
foreach ($arr as &$value) {$value *= 2;
}
unset($value); // ? 必須 unset,否則后續循環可能出錯
💡 如果不
unset($value)
,$value
會保留對數組最后一個元素的引用,可能導致后續使用中“意外修改數組”。
🧩 三、條件結構
1. if
、else
、elseif
基本的條件判斷語句。
? 示例:
$score = 85;
if ($score >= 90) {echo "優秀";
} elseif ($score >= 60) {echo "及格";
} else {echo "不及格";
}
2. switch
判斷多個值
適合判斷一個變量等于多個值的情況。
? 示例:
$i = 1;
switch ($i) {case 0:echo "i equals 0";break;case 1:echo "i equals 1";break;default:echo "i 不是 0 或 1";
}
📌 注意:
- 每個
case
后面要加break
,否則會“貫穿”執行下一個case
。 default
是可選的,用于處理“都不匹配”的情況。
3. match
(PHP 8.0+)
比 switch
更現代、更安全,返回值形式,像三元表達式一樣使用。
? 示例:
$i = 1;
$result = match ($i) {0 => "i equals 0",1 => "i equals 1",default => "i 不是 0 或 1",
};
echo $result;
📌 優點:
- 自動嚴格比較(
===
) - 不允許貫穿(fall-through)
- 可以直接賦值給變量
🧱 四、跳轉結構
1. break
結束當前的 for
、foreach
、while
、do-while
、switch
結構。
? 示例:
for ($i = 0; $i < 10; $i++) {if ($i == 5) {break;}echo $i;
}
// 輸出:01234
📌 可選參數:
break 2; // 跳出兩層循環
2. continue
跳過當前循環中剩余的代碼,開始下一次循環。
? 示例:
for ($i = 0; $i < 5; $i++) {if ($i == 2) {continue;}echo $i;
}
// 輸出:0134
3. goto
跳轉到程序中的某個標簽位置。
? 示例:
goto end;
echo "這段不會執行";
end:
echo "跳轉成功!";
📌 注意:
- 不能跳進
for
、while
、switch
等結構中。 - 可以跳出多重循環,但不建議濫用,容易造成“面條式代碼”。
📁 五、文件包含結構
1. include
包含文件,出錯時只產生警告,腳本繼續執行。
? 示例:
include 'header.php'; // 如果文件不存在,輸出警告,繼續執行
echo "繼續執行";
2. require
包含文件,出錯時產生致命錯誤,腳本停止執行。
? 示例:
require 'config.php'; // 如果文件不存在,腳本停止執行
echo "不會執行";
3. include_once
/ require_once
確保文件只被包含一次,避免重復定義。
? 示例:
include_once 'functions.php'; // 即使多次調用,也只包含一次
📌 六、總結對比表
結構 | 用途 | 是否返回值 | 是否可跳出 | 是否可跳過當前循環 |
---|---|---|---|---|
while | 條件循環 | ? | ? (break ) | ? (continue ) |
do-while | 先執行后判斷 | ? | ? | ? |
for | 已知循環次數 | ? | ? | ? |
foreach | 遍歷數組 | ? | ? | ? |
if / else / elseif | 條件判斷 | ? | ? | ? |
switch | 多值判斷 | ? | ? | ? |
match | 多值匹配(PHP 8+) | ? | ? | ? |
break | 結束循環或 switch | ? | ? | ? |
continue | 跳過當前循環 | ? | ? | ? |
goto | 跳轉到標簽 | ? | ? | ? |
include | 包含文件 | ? | ? | ? |
require | 必須包含文件 | ? | ? | ? |