不記起來會忘記,雖然記起來會混亂,寫個筆記紀錄一下
本文將介紹如何觸發錯誤、錯誤級別介紹、處理錯誤、錯誤日誌的寫法。
觸發錯誤
使用 Exception 類別
這種方式用於例外處理,當你想捕捉並處理某些條件下的錯誤時,可以拋出一個例外。這通常用於邏輯錯誤或應用程式級別的錯誤。
使用 Error 類別
Error 類別是從 PHP 7 開始引入的,用於處理更底層的錯誤,例如語法錯誤或類型錯誤。這些錯誤通常表示程式碼中的嚴重問題,應該被捕捉並記錄。
使用 trigger_error 函數
trigger_error 函數允許你生成一個用戶定義的錯誤。這對於在開發過程中發出警告或錯誤訊息非常有用。你可以指定錯誤等級,例如 E_USER_WARNING 或 E_USER_ERROR。
範例對比
以下是一個綜合範例,展示了這三種錯誤發出的方式及其處理方法:
這個範例中,Exception 和 Error 被捕捉並處理,而 trigger_error 生成的錯誤則由自訂錯誤處理函數處理。程式不會中止,並且會輸出所有錯誤訊息。
錯誤級別表
系統級別錯誤
錯誤級別中止程式引發者情境描述E_ERROR是系統致命的運行錯誤,例如無效的函數調用E_WARNING否系統運行時警告,例如包含不存在的文件E_PARSE是系統解析錯誤,例如語法錯誤E_NOTICE否系統運行時通知,例如使用未定義的變數E_CORE_ERROR是系統PHP 啟動時的致命錯誤E_CORE_WARNING否系統PHP 啟動時的警告E_COMPILE_ERROR是系統編譯時的致命錯誤E_COMPILE_WARNING否系統編譯時的警告E_STRICT否系統建議的代碼改進措施E_RECOVERABLE_ERROR否系統可捕捉的致命錯誤,例如類型錯誤E_DEPRECATED否系統運行時通知,不建議使用的代碼
用戶級別錯誤
錯誤級別中止程式引發者情境描述E_USER_ERROR是用戶 trigger_error()
用戶生成的致命錯誤,例如自訂的致命錯誤E_USER_WARNING否用戶 trigger_error()
用戶生成的警告,例如自訂的警告訊息E_USER_NOTICE否用戶 trigger_error()
用戶生成的通知,例如自訂的通知訊息E_USER_DEPRECATED否用戶 trigger_error()
用戶生成的過時警告,例如自訂的不建議使用的代碼警告
處理錯誤
以下介紹錯誤處裡的方法:
set_error_handler
set_exception_handler
register_shutdown_function
使用 set_error_handler 處理的錯誤
錯誤級別會中止程式引發者簡單描述情境E_WARNING否系統運行時警告,例如包含不存在的文件E_NOTICE否系統運行時通知,例如使用未定義的變數E_USER_WARNING否用戶 (trigger_error()
)用戶生成的警告E_USER_NOTICE否用戶 (trigger_error()
)用戶生成的通知E_USER_ERROR是用戶 (trigger_error()
)用戶生成的致命錯誤E_USER_DEPRECATED否用戶 (trigger_error()
)用戶生成的過時警告E_DEPRECATED否系統運行時通知,不建議使用的代碼E_RECOVERABLE_ERROR否系統可捕捉的致命錯誤,例如類型錯誤
使用 set_exception_handler 處理的例外
錯誤類型會中止程式引發者簡單描述情境Exception是用戶例如 throw new Exception
Error是用戶例如 throw new Error
使用 register_shutdown_function 處理的錯誤
錯誤級別會中止程式引發者簡單描述情境E_ERROR是系統致命的運行錯誤,例如無效的函數調用E_CORE_ERROR是系統PHP 啟動時的致命錯誤E_COMPILE_ERROR是系統編譯時的致命錯誤E_PARSE是系統解析錯誤,例如語法錯誤
這些表格展示了不同的錯誤處理方法以及它們可以處理的錯誤類型,確保你可以有效地處理所有可能發生的錯誤和例外。
錯誤處裡範例
set_error_handler()
系統只會有一個有作用的 set_error_handler(),後面設置的 handler 會覆蓋前面設置 handler,無法刪除,如有套件設置了,可以用覆蓋的或 set_error_handler(null) 使 handler 失去作用
try-catch
捕獲到 Error or Exception 可統一進行錯誤處裡,當然也可以捕獲後步處理,或存於 error_log
輸出:
錯誤日誌
錯誤日誌就像飛機的黑盒子,記錄著所有錯誤發生的詳細信息,讓我們能夠在錯誤發生後進行分析和診斷,從而提高應用程式的穩定性和可靠性。
以下是錯誤日誌寫法:
綜合錯誤處裡
錯誤日誌的記錄不僅有助於在開發過程中及早發現和修復問題,還能在生產環境中提供寶貴的錯誤追蹤信息。透過詳細的錯誤日誌記錄,我們可以了解錯誤發生的時間、錯誤類型、錯誤訊息以及錯誤發生的文件和行號,這些資訊讓我們快速修正非常重要。
[……]