PHP 程式的三大基本流程結構——順序、分支、循環,其中分支結構由 if、if-else、switch 構成,是實現業務邏輯判斷的核心。本文系統梳理條件控制語句的語法層級、巢狀應用與最佳實踐。
if (判斷條件) {
執行語句體;
}
執行邏輯:條件為真(非零/非空/非 false)時執行大括號內代碼,否則跳過直接執行後續程式。
<?php
$a = 8;
$b = 4;
if ($a > $b) { // 條件成立
$a++;
}
$c = $a + $b;
echo "a+b=" . $c; // 輸出 13
?>
if (判斷條件) {
執行語句體1; // 條件為真
} else {
執行語句體2; // 條件為假
}
核心特性:強制二選一,無「不執行」選項。適用於「若...則...否則...」的互斥業務場景。
<?php
$a = 11;
$b = 9;
if ($a > $b) {
$c = $a + $b; // 20
} else {
$c = $a - $b; // 不會執行
}
echo $c; // 輸出 20
?>
if (條件1) {
語句體1;
} else if (條件2) {
語句體2;
} else if (條件3) {
語句體3;
} else {
預設語句;
}
執行機制:自上而下順序匹配,首個滿足條件的分支執行後整個結構結束。
<?php
$score = 61;
if ($score >= 90) {
echo "成績優秀";
} else if ($score >= 60) {
echo "及格.";
} else if ($score < 60) {
echo "不及格";
} else {
echo "成績有誤";
}
?>
注意:條件順序至關重要,若將 $score >= 60 放在 $score >= 90 之前,90 分以上會被誤判為「及格」。
if (判斷1) {
if (判斷2) {
語句體1;
} else {
語句體2;
}
} else {
// ...
}
配對原則:else 永遠與「最近的未配對 if」綁定。建議始終使用大括號明確界定作用域,避免懸空 else 問題。
<?php
$gender = "女性";
$age = 28;
if ($gender == "男性") {
if ($age >= 18) {
echo "你是個男人";
} else {
echo "你是個男孩";
}
} else {
if ($age >= 18) {
echo "你是個女人";
} else {
echo "你是個女孩";
}
}
?>
switch (表達式) {
case 值1:
執行語句體1;
break;
case 值2:
執行語句體2;
break;
// ...
default:
預設語句體;
break;
}
=== 全等比較(類型+值皆同)break 時會繼續執行後續 casecase 不匹配時的兜底方案,位置可置於任意處<?php
$i = 0;
switch ($i) {
case 0:
echo "you are a girl<br>";
break;
case 1:
echo "you are a boy<br>";
break;
default:
echo "it's an animal";
}
?>
| 維度 | if-else 鏈 | switch |
|---|---|---|
| 適用場景 | 複雜條件表達式、區間判斷 | 單一變數與離散值精確匹配 |
| 比較方式 | 邏輯運算結果(true/false) | 全等比較(===) |
| 性能 | 順序評估,條件多時較慢 | 內部優化,大量分支時更快 |
| 可讀性 | 條件複雜時清晰 | 結構扁平,分支多時優雅 |
| 類型轉換 | 隱式轉換為布林 | 無隱式轉換,嚴格匹配 |
$result = $cond ? $val1 : $val2;break
switch ($status) {
case 'pending':
case 'processing':
echo "處理中...";
break;
case 'completed':
echo "已完成";
break;
}
switch 使用全等比較,"1" 不會匹配 case 1:條件控制是程式靈魂。if-else 適合複雜邏輯判斷,switch 專治多值枚舉分發。實戰中靈活組合,配合衛語句提前返回、策略模式消除巨大條件塊,能寫出清晰、可擴展的業務邏輯代碼。