PHP 除錯與錯誤處理技巧 (Debugging)

在開發 PHP 程式時,難免會遇到 Bug。掌握有效的除錯工具與技巧,能幫你節省大量的時間。

基礎除錯函數

最直接的方法就是把變數的內容印出來看。

var_dump()

顯示變數的型別與內容,是最常用的除錯工具。

<?php
$user = [
    'id' => 1,
    'name' => 'Alice',
    'active' => true
];

var_dump($user);
// 輸出:
// array(3) {
//   ["id"]=> int(1)
//   ["name"]=> string(5) "Alice"
//   ["active"]=> bool(true)
// }
?>

以較易讀的人類格式顯示變數內容(主要用於陣列與物件),不會顯示型別。

<?php
print_r($user);
// 輸出:
// Array ( [id] => 1 [name] => Alice [active] => 1 )
?>

設定錯誤顯示

在開發環境中,你應該讓 PHP 顯示所有錯誤,以便即時修正。

在程式碼中設定

<?php
// 回報所有錯誤
error_reporting(E_ALL);

// 將錯誤顯示在網頁上
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

// 開放測試時故意寫錯
echo $undefinedVariable;
?>
重要安全性提醒:在正式環境 (Production) 中,絕對不能將 display_errors 設為 1,這會洩漏你的程式路徑與敏感資訊。

使用 Error Log (錯誤日誌)

如果你不想把錯誤印在畫面上,或是想追蹤背景執行的程式,可以使用 Log。

error_log()

<?php
// 寫入系統預設的 PHP Error Log
error_log("這是一條自訂錯誤訊息");

// 寫入特定檔案
error_log("發生問題了", 3, "/path/to/my-errors.log");
?>

進階除錯工具

Symfony VarDumper (Dump and Die)

如果你使用 Composer,強烈建議安裝這個工具。它提供更漂亮的格式化輸出。

composer require symfony/var-dumper

安裝後,你可以使用 dd() (Dump and Die) 函數,它會印出內容後直接終止程式:

<?php
require 'vendor/autoload.php';

$data = ['a' => 1, 'b' => 2];
dd($data); // 輸出漂亮格式並停止執行
?>

Xdebug

Xdebug 是 PHP 最強大的除錯擴充,它支援:

  • Step Debugging:可以讓程式暫停在某一行,逐步檢查狀態。
  • Stack Traces:詳細的錯誤呼叫堆疊。
  • Profiling:分析程式碼效能瓶頸。

大多數現代 IDE (如 VS Code, PhpStorm) 都能完美整合 Xdebug。

除錯檢查清單

當程式不如預期時,請依序檢查:

  1. 分號 ;:是否漏掉結尾?
  2. 變數名稱:PHP 變數有區分大小寫,$Name 不等於 $name
  3. 錯誤訊息:查看 display_errors 或系統 Log 裡的具體錯誤內容。
  4. dump 關鍵點:在關鍵步驟使用 var_dump() 檢查資料流是否符合預期。
  5. 括號匹配{}() 是否成對。