發布時間:2021-11-22 16:40:59來源:轉載
當PHP語言遇到異常的情況(比如數據庫連接不上或者函數參數傳遞錯誤),則會報出一些錯誤,錯誤可以分為多種類型,除了E_ERROR和E_CORE_ERROR錯誤,其它錯誤不會終止程序運行。
PHP讓人覺得簡單的原因就在于程序不會頻繁的報錯,給人一種編寫流暢和方便的錯覺。
也正因為這個原因PHP程序的嚴謹性和準確性差了不少,比如mysql_fetch_array查詢遇到網絡錯誤返回FALSE的時候(程序沒有終止運行),假如調用程序認為查詢沒有匹配的數據,則這個程序本質是錯誤的。
通過 php.ini的指令 error_reporting或者動態調用 error_reporting()函數我們可以選擇報告什么類型的錯誤,通過 display_errors指令則可以控制錯誤是否在線輸出.而 error_log指令可以控制將錯誤輸出到日志中。
如何正確使用錯誤
不管是系統函數或者是自定義函數,假如內部遇到錯誤,如何告之調用者呢?一般是通過函數返回 TRUE或者 FALSE來表明.這種處理方式有幾個弊端:
調用者只知道發生了錯誤,但是返回的錯誤信息太少,且缺乏錯誤類型的說明
程序處理邏輯和錯誤處理混雜在一塊,產生的代碼會非常的不清晰
一個小技巧: error_get_last()函數會返回較近錯誤產生的具體原因
較佳實踐
set_error_handler()函數來托管所有的錯誤
trigger_error()函數可以觸發自定義錯誤,可以用來在函數中代替 return 語句
將所有的錯誤輸出到日志中,同時定義錯誤類型
對用戶顯示錯誤,比如將錯誤以一種更友好的方式返回給用戶
生產環境下 display_errors指令要關閉,開發環境則該指令打開