詳解PHP異常機制的流程及原理

來源:互聯網
上載者:User
關鍵字 詳解PHP異常機制的流程及原理

 PHP的異常機制的原理是什麼?在PHP每一個可獨立執行的op array最後的ZEND_HANDLE_EXCEPTION是用來幹什麼呢?讓我們從一個問題說起。

對於一下代碼,onError明明執行了, 但是onException卻沒有執行, 為什麼呢?

 
  1. function onError($errCode, $errMesg, $errFile, $errLine) {   
  2. echo "Error Occurred\n";   
  3. throw new Exception($errMesg); 
  4. } 
  5. function onException($e) {   
  6. echo $e->getMessage(); 
  7. } 
  8. set_error_handler("onError"); 
  9. set_exception_handler("onException"); 
  10. /* 我從不會以我的名字命名檔案, 所以這個檔案不存在 */ 
  11. require("laruence.php"); 

運行結果:

 
  1. Error Occurred 
  2. PHP Fatal error: main(): Failed opening required 'laruence.php 

首先, 我們要知道, Require在包含一個找不到的問題的時候, 會前後拋出倆個錯誤:

1. WARNING : 在PHP試圖開啟這個檔案的時候拋出。

2. E_COMPILE_ERROR : 從PHP開啟檔案的函數返回失敗以後拋出。

而我們知道, set_error_handler是不能捕獲E_COMPILE_ERROR錯誤的。所以, 在onError中, 只能捕獲到第一個WARNING錯誤, 而在onError中拋出的異常, 為什麼沒有被預設exception_handler捕獲呢?這就要說說PHP

1 2 3 下一頁
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.