文章

PHP - 錯誤處理與除錯


課程簡介

PHP 在開發過程中不可避免會遇到各種錯誤與異常,正確的錯誤處理與除錯技術能提升程式的穩定性與開發效率。本課程將介紹 PHP 的錯誤類型、錯誤處理機制、除錯技巧與最佳實踐。


PHP 錯誤類型

1. 語法錯誤(Syntax Error)

  • 當 PHP 解析器無法執行程式碼時觸發。
  • 通常由拼寫錯誤或遺漏的標點符號導致。

範例:

1
2
<?php
echo "Hello, PHP";

2. 執行錯誤(Runtime Error)

  • 在程式執行期間發生的錯誤,如無法找到檔案、除以零等問題。

範例:

1
2
3
<?php
$file = fopen("nonexistent.txt", "r");  // 檔案不存在
?>

3. 邏輯錯誤(Logical Error)

  • 程式邏輯不正確,導致結果與預期不符。
  • 不會產生明顯的錯誤訊息。

範例:

1
2
3
4
<?php
$number = 10;
echo $number / 0;  // 邏輯問題,可能導致警告或錯誤
?>

錯誤處理機制

1. 基本錯誤處理

PHP 的錯誤訊息會直接顯示在頁面上,但在實際環境中需要控制錯誤輸出。

error_reporting()

設定應該報告哪些錯誤。

1
2
3
<?php
error_reporting(E_ALL);  // 顯示所有錯誤
?>

ini_set()

動態設定錯誤顯示選項。

1
2
3
<?php
ini_set("display_errors", 1);  // 開啟錯誤顯示
?>

2. 自定義錯誤處理

使用 set_error_handler()

自定義錯誤處理函式。

1
2
3
4
5
6
7
8
<?php
function customError($errno, $errstr) {
    echo "錯誤:[$errno] $errstr<br>";
}
set_error_handler("customError");

echo $undefinedVar;  // 觸發錯誤
?>

3. 例外處理

使用 try-catch

用於捕捉並處理例外狀況。

1
2
3
4
5
6
7
8
9
10
<?php
try {
    if (!file_exists("example.txt")) {
        throw new Exception("檔案不存在!");
    }
    $file = fopen("example.txt", "r");
} catch (Exception $e) {
    echo "例外訊息:" . $e->getMessage();
}
?>

自定義例外類別

建立自己的例外類別。

1
2
3
4
5
6
7
8
9
<?php
class CustomException extends Exception {}

try {
    throw new CustomException("自定義例外發生!");
} catch (CustomException $e) {
    echo "例外:" . $e->getMessage();
}
?>

除錯技巧

1. 使用 var_dump()print_r()

檢查變數內容。

1
2
3
4
5
<?php
$data = ["name" => "Alice", "age" => 25];
var_dump($data);
print_r($data);
?>

2. 使用 debug_backtrace()

檢查函式調用堆疊。

1
2
3
4
5
6
7
8
9
10
11
<?php
function test1() {
    test2();
}

function test2() {
    debug_print_backtrace();
}

test1();
?>

3. 使用除錯工具

  • Xdebug:PHP 的專業除錯工具,支援斷點與調試堆疊分析。
  • PHPStorm:結合 IDE 提供圖形化的除錯介面。

教學練習

練習 1:自定義錯誤處理函式

建立一個程式,自定義錯誤處理函式,當變數未定義時輸出自定義訊息。


練習 2:例外處理

建立一個程式,當輸入值為負數時拋出例外,並在 catch 區塊中輸出提示。


練習 3:使用 Xdebug

配置 Xdebug 並進行斷點除錯,觀察程式執行流程。


教學重點

  • 理解 PHP 的錯誤類型與其處理方式。
  • 熟悉 try-catch 和自定義錯誤處理的應用。
  • 掌握基本除錯技巧與專業工具的使用。

本文章以 CC BY 4.0 授權