php與其他計算機程式語言在遇到錯誤就丟擲異常不太一樣,php在處理物件時它也有異常機制,但是php會盡可能的愉快的去執行而無視發生的事情,除非遇到乙個極端嚴重錯誤才會丟擲異常。本文主要給大家分享php相關的錯誤異常處理機制。
錯誤等級
php 有幾個錯誤嚴重性等級。三個最常見的的資訊型別是錯誤(error)、通知(notice)和警告(warning)。它們有不同的嚴重性: e_error 、e_notice和 e_warning。錯誤是執行期間的嚴重問題,通常是因為**出錯而造成,必須要修正它,否則會使 php 停止執行。通知是建議性質的資訊,是因為程式**在執行期有可能造成問題,但程式不會停止。 警告是非致命錯誤,程式執行也不會因此而中止。
使用 php 內建的函式 error_reporting(),可以設定程式執行期間的錯誤等級,方法是傳入預定義的錯誤等級常量,這意味著如果你只想看到警告和錯誤 - 而非通知 - 你可以這樣設定:
error_reporting(e_error | e_warning);
你可以讓 php 利用錯誤控制操作符 @ 來抑制特定的錯誤, 如@fopen()。將這個操作符放置在表示式之前,其後的任何錯誤都不會出現。但是我不建議這麼做。
錯誤報告
錯誤日誌對於發現程式中的錯誤是非常有幫助的,但是有些時候它也會將應用程式的結構暴露給外部。為了有效的保護你的應用程式不受到由此而引發的問題。
在開發環境中,我喜歡讓php顯示並記錄所有錯誤訊息,而在生產環境中,我會讓php記錄大多數錯誤訊息,但不顯示出來。不管怎麼做,一定要遵循以下4個規則:
一定要讓php報告錯誤。
在開發環境中顯示錯誤。
在生產環境中不能顯示錯誤。
在開發環境和生產環境中都要記錄錯誤。
我在php.ini中為開發環境設定錯誤報告方式如下:
;顯示錯誤
display_errors = on
display_startup_errors = on
;報告所有錯誤
error_reporting = -1
;記錄錯誤
log_errors = on
我在php.ini中為生產環境設定錯誤報告方式如下:
;不顯示錯誤
display_errors = off
display_startup_errors = off
;除了注意事項之外,報告所有其他錯誤
error_reporting = e_all & ~e_notice
;記錄錯誤
log_errors = on
異常捕獲
異常是許多流行程式語言的標配,但它們往往被 php 開發人員所忽視。像 ruby 就是乙個極度重視異常的語言,無論有什麼錯誤發生,像是 http 請求失敗,或者資料庫查詢有問題,甚至找不到乙個資源,ruby (或是所使用的 gems),將會丟擲異常,你可以通過螢幕立刻知道所發生的問題。
php 處理這個問題則比較隨意,呼叫 file_get_contents() 函式通常只會給出 false 值和警告。許多較早的 php 框架比如 codeigniter 只是返回 false,將資訊寫入專有的日誌,或者讓你使用類似 $this->upload->get_error() 的方法來檢視錯誤原因。這裡的問題在於你必須找出錯誤所在,並且通過翻閱文件來檢視這個類使用了什麼樣的錯誤的方法,而不是明確的暴露錯誤。
另乙個問題發生在當類自動丟擲錯誤到螢幕時會結束程式。這樣做會阻擋其他開發者動態處理錯誤的機會。應該丟擲異常讓開發人員意識到錯誤的存在,讓他們可以選擇處理的方式,例如:
php 不丟擲異常 PHP 異常處理
異常的基本使用 當異常被丟擲時,其後的 不會繼續執行,php 會嘗試查詢匹配的 catch 塊。如果異常沒有 獲,而且又沒用使用 set exception handler 作相應的處理的話,那麼將發生乙個嚴重的錯誤 致命錯誤 並且輸出 uncaught exception 未捕獲異常 的錯誤訊息。...
php 不丟擲異常 PHP如何丟擲異常處理錯誤
首先要知道什麼是php異常?異常 exception 用於在指定的錯誤發生時改變指令碼的正常流程。php 5 提供了一種新的物件導向的錯誤處理方法。異常處理用於在指定的錯誤 異常 情況發生時改變指令碼的正常流程。這種情況稱為異常。當異常被觸發時,通常會發生 當前 狀態被儲存 執行被切換到預定義的異常...
PHP錯誤與異常處理
和其他程式語言遇到錯誤就丟擲異常不一樣,php在處理物件時它也有異常機制,但是php會盡可能的愉快的去執行而無視發生的事情,除非遇到乙個極端嚴重錯誤才會丟擲異常。本文概述php相關的錯誤異常處理機制。錯誤等級 php 有幾個錯誤嚴重性等級。三個最常見的的資訊型別是錯誤 error 通知 notice...