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 授權