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

PHP 異常處理完整指南:Try-Catch 機制、自定義異常與最佳實踐

     編輯:PHP 入門

PHP 異常處理完整指南

在現代 PHP 開發中,異常處理是構建健壯應用程式的基石。PHP 5 引入了面向對象的異常機制,取代了傳統的錯誤處理方式,讓開發者能夠更優雅地管理程式流程中的錯誤狀況。

什麼是異常?

異常是指在程式執行期間發生的非預期情況,例如資料庫連線失敗、檔案讀取錯誤或輸入驗證不通過。當異常被觸發時,PHP 會保存當前代碼狀態,並將執行權移交給預定義的異常處理器。根據處理邏輯,程式可以選擇恢復執行、終止腳本或跳轉到其他代碼位置繼續運行。

核心原則:異常僅應用於真正的錯誤情況,而非作為控制流程跳轉的手段。

基本異常處理流程:Try、Throw 與 Catch

完整的異常處理結構包含三個關鍵字:

  1. Try:包裹可能拋出異常的代碼區塊
  2. Throw:在特定條件下主動拋出異常物件
  3. Catch:捕獲異常並建立包含錯誤資訊的物件進行處理
<?php
function checkNum($number) {
    if ($number > 1) {
        throw new Exception("數值必須小於或等於 1");
    }
    return true;
}

try {
    checkNum(2);
    echo "此行不會被輸出";
} catch (Exception $e) {
    echo "錯誤訊息: " . $e->getMessage();
}
?>

若異常未被捕獲且未設定頂層處理器,PHP 將拋出致命錯誤:Uncaught Exception。

自定義異常類別

透過繼承內建的 Exception 類別,我們可以建立具備自定義功能的異常類別:

<?php
class CustomException extends Exception {
    public function errorMessage() {
        return "錯誤行號 {$this->getLine()} 在 {$this->getFile()}: {$this->getMessage()} 不是合法的 E-Mail 格式";
    }
}

$email = "invalid-email";
try {
    if (filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
        throw new CustomException($email);
    }
} catch (CustomException $e) {
    echo $e->errorMessage();
}
?>

多重異常捕獲

一個 try 區塊可搭配多個 catch 區塊,分別處理不同類型的異常:

<?php
try {
    if (filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
        throw new CustomException($email);
    }
    if (strpos($email, "example") !== FALSE) {
        throw new Exception("$email 包含 example 字串");
    }
} catch (CustomException $e) {
    echo $e->errorMessage();
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

重新拋出異常

在 catch 區塊中可再次拋出異常,將系統級錯誤轉換為使用者友善的訊息:

<?php
try {
    try {
        if (strpos($email, "example") !== FALSE) {
            throw new Exception($email);
        }
    } catch (Exception $e) {
        throw new CustomException($email);
    }
} catch (CustomException $e) {
    echo $e->errorMessage();
}
?>

頂層異常處理器

使用 set_exception_handler() 設定全域未捕獲異常的處理函數,作為最後防線:

<?php
function globalHandler($exception) {
    echo "全域異常: " . $exception->getMessage();
}
set_exception_handler('globalHandler');
throw new Exception('未被捕獲的異常');
?>

異常處理黃金法則

  • 需處理的代碼必須置於 try 區塊內
  • 每個 try 或 throw 至少對應一個 catch
  • 可使用多個 catch 捕獲不同異常類型
  • catch 區塊中可重新拋出異常

總結:拋出異常,就必須捕獲它。良好的異常處理能讓應用程式在面對錯誤時保持穩定、可維護且使用者友善。

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