目錄
前言
概述
錯誤的層級結構
#TypeError 類型錯誤
#Exception 例外
首頁 後端開發 php教程 詳細介紹PHP7的異常處理程式碼範例

詳細介紹PHP7的異常處理程式碼範例

Mar 11, 2017 am 09:22 AM

前言

PHP7的改變中,影響比較大的,包括異常處理

概述

更多的異常是直接透過PHP直接處理的,和之前的PHP5不同的是更多的異常是透過Error exceptions來拋出。

作為一個普通的擴展,Error exceptions會持續冒出直到匹配到對應的catch區塊。如果沒有進行匹配,就會觸發被設定的set_exception_handler()來執行處理,如果沒有預設的異常處理程序,則該異常將被轉換為一個致命錯誤,並且將被像一個傳統的錯誤被處理。

由於Error在錯誤層次結構中不繼承異常,像這樣的程式碼catch (Exception $e) { ... }在PHP5中並不會捕獲到對應的例外。我們可以用程式碼catch (Error $e) { ... }set_exception_handler(),來處理Error。

錯誤的層級結構

  • Throwable

    • #….


    • ArithmeticError 算數錯誤
    • #AssertionError 宣告錯誤

    • ##ParseError 解析錯誤


    • ParseError 解析錯誤

#TypeError 類型錯誤

pisionByZeroError 除數為0的錯誤

##Error 錯誤

#Exception 例外


######PHP RFC######Throwable Interface###

1

2

3

4

5

6

7

function add(int $left, int $right) {

    return $left + $right;

}try {    echo add('left', 'right');

} catch (Exception $e) {    // Handle exception} catch (Error $e) { // Clearly a different type of object

    // Log error and end gracefully

    var_dump($e);

}

登入後複製
###這裡,並沒有出現伺服器500的錯誤。原因在於,PHP7中的Error把它攔截住了,沒有冒泡在伺服器中。 ###

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

object(TypeError)#1 (7) {

  ["message":protected]=> 

  string(139) "Argument 1 passed to add() must be of the type integer, string given, called in /Applications/mamp/apache2/htdocs/curl/error.php on line 14"

  ["string":"Error":private]=>  string(0) ""

  ["code":protected]=>  int(0)

  ["file":protected]=>  string(48) "/Applications/mamp/apache2/htdocs/curl/error.php"

  ["line":protected]=>  int(9)

  ["trace":"Error":private]=>

  array(1) {

    [0]=>

    array(4) {

      ["file"]=>      string(48) "/Applications/mamp/apache2/htdocs/curl/error.php"

      ["line"]=>      int(14)

      ["function"]=>      string(3) "add"

      ["args"]=>

      array(2) {

        [0]=>        string(4) "left"

        [1]=>        string(5) "right"

      }

    }

  }

  ["previous":"Error":private]=>

  NULL

}

登入後複製
###這樣我們就可以透過日誌的方式記錄他們。 ######Exceptions in the engine (for PHP 7)###

1

2

3

4

5

6

7

8

9

function call_method($obj) {

    $obj->method();

}try {

    call_method(null);

     // oops!

     }

     catch (EngineException $e) {   

    echo "Exception: {$e->getMessage()}\n";

}//其实上面的例子我在运行过程中,并没有被EngineException捕获异常,经过测试,也是通过Error进行的错误的拦截

登入後複製
###如果例外沒有被捕獲,PHP將繼續擔任目前它拋出同樣的致命錯誤。 ######Reclassify E_STRICT notices############

以上是詳細介紹PHP7的異常處理程式碼範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

C++ 函式異常與多執行緒:並發環境下的錯誤處理 C++ 函式異常與多執行緒:並發環境下的錯誤處理 May 04, 2024 pm 04:42 PM

C++ 函式異常與多執行緒:並發環境下的錯誤處理

C++ 異常處理如何支援自訂錯誤處理例程? C++ 異常處理如何支援自訂錯誤處理例程? Jun 05, 2024 pm 12:13 PM

C++ 異常處理如何支援自訂錯誤處理例程?

Java函數中遞歸呼叫與異常處理有何關係? Java函數中遞歸呼叫與異常處理有何關係? May 03, 2024 pm 06:12 PM

Java函數中遞歸呼叫與異常處理有何關係?

C++ 技術中的例外處理:如何在多執行緒環境中正確處理例外狀況? C++ 技術中的例外處理:如何在多執行緒環境中正確處理例外狀況? May 09, 2024 pm 12:36 PM

C++ 技術中的例外處理:如何在多執行緒環境中正確處理例外狀況?

C++ Lambda 表達式如何進行異常處理? C++ Lambda 表達式如何進行異常處理? Jun 03, 2024 pm 03:01 PM

C++ Lambda 表達式如何進行異常處理?

PHP異常處理:透過異常追蹤了解系統行為 PHP異常處理:透過異常追蹤了解系統行為 Jun 05, 2024 pm 07:57 PM

PHP異常處理:透過異常追蹤了解系統行為

如何處理跨執行緒的C++異常? 如何處理跨執行緒的C++異常? Jun 06, 2024 am 10:44 AM

如何處理跨執行緒的C++異常?

記錄一次用strace診斷php佔用系統資源過高的問題 記錄一次用strace診斷php佔用系統資源過高的問題 May 03, 2024 pm 04:31 PM

記錄一次用strace診斷php佔用系統資源過高的問題

See all articles