PHP 程序三大基本結構
| 結構類型 | 特點 | 關鍵字 |
| 順序結構 | 代碼自上而下依次執行 | 無特殊關鍵字 |
| 選擇結構 | 根據條件決定執行路徑 | if, else, elseif, switch, match |
| 循環結構 | 重複執行代碼塊 | for, foreach, while, do-while |
選擇結構深度解析
if / elseif / else
<?php
$score = 85;
if ($score >= 90) {
$grade = 'A';
} elseif ($score >= 80) {
$grade = 'B';
} elseif ($score >= 70) {
$grade = 'C';
} elseif ($score >= 60) {
$grade = 'D';
} else {
$grade = 'F';
}
// PHP 8.0+ match 表達式(更簡潔、嚴格比較)
$grade = match (true) {
$score >= 90 => 'A',
$score >= 80 => 'B',
$score >= 70 => 'C',
$score >= 60 => 'D',
default => 'F',
};
?>
switch vs match 對比
| 特性 | switch | match (PHP 8.0+) |
| 比較類型 | 鬆散比較 (==) | 嚴格比較 (===) |
| 返回值 | 無(需自行賦值) | 直接返回值 |
| break | 必須手動 break | 自動中斷 |
| 多條件 | case 'a': case 'b': | 用逗號分隔 |
| 默認分支 | default: | default => |
<?php
// match 多條件示例
$status = match ($code) {
200, 201, 204 => 'success',
400, 401, 403, 404 => 'client_error',
500, 502, 503 => 'server_error',
default => 'unknown',
};
?>
循環結構完全指南
1. foreach —— 遍歷數組/對象首選
<?php
$fruits = ['apple', 'banana', 'orange'];
// 僅值
foreach ($fruits as $fruit) {
echo $fruit . "\n";
}
// 鍵值對
$user = ['name' => '張三', 'age' => 25, 'city' => '北京'];
foreach ($user as $key => $value) {
echo "$key: $value\n";
}
// 引用修改原數組
foreach ($fruits as &$fruit) {
$fruit = strtoupper($fruit);
}
unset($fruit); // 重要:銷毀引用,防止後續誤用
?>
2. for —— 知道循環次數時使用
<?php
// 輸出 1-10
for ($i = 1; $i <= 10; $i++) {
echo $i . ' ';
}
// 遍歷數組(不推薦,foreach 更優)
$arr = ['a', 'b', 'c'];
for ($i = 0, $len = count($arr); $i < $len; $i++) {
echo $arr[$i];
}
// 多變量控制
for ($i = 0, $j = 10; $i < $j; $i++, $j--) {
echo "$i + $j = " . ($i + $j) . "\n";
}
?>
3. while / do-while —— 條件控制循環
<?php
// while:先判斷後執行
$i = 1;
while ($i <= 5) {
echo $i++;
}
// do-while:至少執行一次
$input = '';
do {
$input = readline('請輸入 quit 退出: ');
} while ($input !== 'quit');
// 典型場景:讀取數據庫結果集
$stmt = $pdo->query('SELECT * FROM users');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
process($row);
}
?>
4. 循環控制語句
| 語句 | 作用 | 適用結構 |
| break | 跳出當前循環(可帶數字跳出多層) | for, foreach, while, do-while, switch |
| continue | 跳過本次迭代,進入下一次 | for, foreach, while, do-while |
| break 2 | 跳出雙層循環 | 嵌套循環 |
<?php
// 查找二維數組中第一個大於 50 的值
$matrix = [[10,20], [30,60], [70,80]];
$found = false;
foreach ($matrix as $row) {
foreach ($row as $val) {
if ($val > 50) {
echo "找到: $val\n";
$found = true;
break 2; // 直接跳出兩層
}
}
}
?>
進階:生成器 —— 內存高效的迭代
<?php
function fibonacci(int $n): Generator {
$a = 0; $b = 1;
for ($i = 0; $i < $n; $i++) {
yield $a;
[$a, $b] = [$b, $a + $b];
}
}
// 惰性計算,不佔用大量內存
foreach (fibonacci(1000000) as $num) {
// 處理...
if ($num > 10000) break; // 提前結束,節省資源
}
?>
最佳實踐速查
- 遍歷數組/對象 →
foreach
- 已知次數/計數器 →
for
- 條件不確定次數 →
while
- 至少執行一次 →
do-while
- 大數據/無限序列 →
Generator (yield)
- PHP 8.0+ 多分支 →
match 替代 switch
掌握三大結構與五種循環,寫出清晰、高效、現代化的 PHP 代碼。