我是PHP新手,所以我很抱歉,如果這看起來很愚蠢。我搜索了四周,找不到任何具體解釋我在找什麼的東西。PHP:錯誤處理的控制流程是什麼?
最終我有兩個目標。
- 在生產中,當發生意外錯誤時,向用戶顯示默認的「oops」頁面。
- 當發生預期的錯誤時,處理它而不會PHP死亡。
我的PHP錯誤處理的思維模型足以讓我無法自信地前進,並且我一直無法找到任何有關此過程的良好文檔。
給一些人爲的例子。
- 用戶發出請求,連接到數據庫失敗,我們顯示一個oops消息。
- 用戶發出請求,腳本不能正確解析,我們會顯示oops消息。
- 用戶發出請求,我們用樂觀鎖定的更新來查詢數據庫。它失敗了,所以我們通知用戶該對象已被更新。
我認爲我的大部分困惑都是圍繞着什麼樣的錯誤導致腳本死亡,哪些錯誤不會(使用默認處理程序)以及腳本何時死亡,我們如何優雅地通知用戶?
另外,做任何標準的php函數/對象使用異常?如果我選擇以更多的C風格處理異常,我是否會對我的任何一點感到驚訝?這是否會在PHP6中改變?如果是這樣,我會努力討論使用c風格和異常之間的差異,但如果不是,我寧願只在整個PHP5中一直使用c風格。除非我絕對需要,否則這不是我想解決的問題。
編輯: 我剛剛意識到內容並不完全符合標題。我想知道,發生錯誤時,PHP的邏輯流程是什麼?這樣我可以更好地理解如何實現我在PHP中的錯誤處理方面的目標。
PHP的內部錯誤處理程序何時會終止腳本? – Fred 2010-02-21 17:33:03
當一個不可恢復的錯誤被觸發(E_ERROR)_並且沒有用戶定義的處理程序可以正常處理它。如果E_PARSE在當前執行行中被觸發,則會終止解釋器(因此不在實際使用的某個函數內)。有關更多信息,請參見http://www.php.net/manual/en/errorfunc.constants.php。 – Kris 2010-02-21 18:21:53
謝謝克里斯,那正是我正在尋找的。我曾嘗試儘早找到這些信息並失敗。 這聽起來好像我可以成立一個E_ERROR一個處理程序,並把它轉到一個oops頁面,然後用trigger_error()觸發了另一個處理程序E_USER_ERROR這也將進入「糟糕」頁面,其他不可恢復的條件如無法連接到數據庫。 根據文檔,E_USER_ERROR「就像E_ERROR」一樣。如果默認錯誤處理程序獲取它,我認爲它會像E_ERROR一樣終止腳本。 – Fred 2010-02-22 03:33:53