首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 條件控制結構完整指南:if/else、elseif、switch 深度解析

     編輯:PHP 相關知識

前言

條件判斷是程式設計的基石,PHP 提供了 if/else、elseif、switch 等多種控制結構。掌握它們的語法細節、執行機制與最佳實踐,能寫出更清晰、可維護性更高的程式碼。

一、if/else 基礎語法

1. 單一條件判斷

<?php
if (條件) {
    // 條件為 true 時執行
} else {
    // 條件為 false 時執行
}
?>

範例:判斷是否為週末

<?php
if (date("D") == "Sat") {
    echo "週末到了,好好放鬆一下!";
} else {
    echo "繼續努力工作/學習吧!";
}
?>

2. 多行敘述必須加大括號

即使 else 只有一行,養成加大括號的習慣可避免後續維護時的邏輯錯誤:

<?php
if (file_exists("/usr/local/lib/php3.ini")) {
    echo "找到 PHP3 設定檔";
    readfile("/usr/local/lib/php3.ini");
} else {
    echo "找不到設定檔";
}
?>

二、elseif 多重條件判斷

當需要依序檢查多個互斥條件時使用:

<?php
if (條件1) {
    // ...
} elseif (條件2) {
    // ...
} elseif (條件3) {
    // ...
} else {
    // 以上皆不符合
}
?>

範例:比較兩數大小

<?php
$a = 10; $b = 20;

if ($a > $b) {
    echo "a 比 b 大";
} elseif ($a == $b) {
    echo "a 等於 b";
} else {
    echo "a 比 b 小";
}
?>

⚠️ 避免過度巢狀

超過 3-4 層的 if/elseif/else 會嚴重降低可讀性,建議重構為:

  • 提早返回 (Guard Clause)
  • 使用 switch 或查表法
  • 封裝為獨立函式

三、switch 多重分支結構

語法結構

<?php
switch (運算式) {
    case 值1:
        // 程式碼
        break;
    case 值2:
        // 程式碼
        break;
    default:
        // 所有 case 都不符合時執行
}
?>

執行流程

  1. 計算運算式的值(通常是變數)
  2. 依序與各 case 值比較(使用鬆散比較 ==)
  3. 匹配成功則執行該區塊,遇到 break 跳出
  4. 若無 break 會「貫穿」執行下一個 case(通常是 Bug)
  5. 全無匹配則執行 default

範例:星期顯示

<?php
$d = date("D"); // 取得星期縮寫 Mon, Tue...

switch ($d) {
    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;
    default:  echo "未知日期";
}
?>

實戰應用:單一入口多功能路由

利用 switch 實現簡易的 action 分派器:

<?php
// solution.php
$action = $_GET['action'] ?? 'default';

switch ($action) {
    case 'add':
        echo "執行新增功能";
        break;
    case 'del':
        echo "執行刪除功能";
        break;
    case 'search':
        echo "執行查詢功能";
        break;
    case 'update':
        echo "執行更新功能";
        break;
    default:
        echo "未知操作";
}
?>

四、進階技巧與最佳實踐

1. 嚴格比較 switch (PHP 8.0+)

PHP 8.0 引入 match 表達式,採用嚴格比較 (===),且不需要 break:

<?php
$result = match ($status) {
    200 => '成功',
    404 => '找不到',
    500 => '伺服器錯誤',
    default => '未知狀態',
};
?>

2. 多條件合併判斷

<?php
// 多個值執行相同邏輯
switch ($role) {
    case 'admin':
    case 'super_admin':
    case 'editor':
        $canPublish = true;
        break;
    default:
        $canPublish = false;
}
?>

3. 替代方案:查表法 (Lookup Table)

對於固定映射關係,陣列查表比 switch 更簡潔:

<?php
$weekMap = [
    'Mon' => '週一', 'Tue' => '週二', 'Wed' => '週三',
    'Thu' => '週四', 'Fri' => '週五', 'Sat' => '週六', 'Sun' => '週日'
];
echo $weekMap[date('D')] ?? '未知';
?>

五、效能與選擇建議

場景推薦結構理由
2-3 個簡單條件if/else直觀易讀
多個離散值比較switch / match語意清晰,JIT 優化友善
範圍/複雜邏輯判斷if/elseif支援任意布林運算式
固定鍵值映射陣列查表O(1) 查找,程式碼最少
狀態機/流程控制switch / 狀態模式結構化管理狀態轉移

總結

if/else 適合複雜邏輯與範圍判斷,switch 適合離散值多重分支,PHP 8.0+ 建議優先使用 match 表達式。實務上靈活組合、善用查表法與提早返回,能寫出既高效又優雅的條件控制程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved