的異常處理 php7異常與錯誤處理和自定義異常

2021-10-16 02:57:52 字數 2804 閱讀 2828

7.2版本異常與錯誤的概述

什麼叫做異常?

異常是指程式執行中不符合預期情況以及與正常流程不同的狀況。

比如你鏈結資料庫,在引數都寫上去的條件下,發現鏈結不上去,這就屬於不符合預期。

可以被 try-catch 捕捉得到

什麼叫做錯誤?

是屬於php程式自身的問題,一般是由非法的語法,環境問題導致的,使得編譯器無法通過檢查,甚至無法執行的情況。

平時遇到的 warming、notice都是錯誤,只是級別不同而已。

例如:除了這幾種情況,其餘全部為異常

異常處理

在以前的 php5.x 中 並且不能被 try-catch 捕捉得到,到了 php 7.x 中,定義了乙個 throwable 介面 並使得大部分的 error 和exception 實現了該介面,我們得以在 try-catch 中丟擲該錯誤。

所以說以後想要捕獲異常,而你又不知道此異常是 error 還是 exception 的話,可以向這樣丟擲

trycatch(throwable $e)
錯誤的級別在 php 中的錯誤也是有級別的

parse error >fatal error > waning > notice > deprecated

deprecated 最低級別的錯誤(不推薦,不建議)使用一些過期函式的時候會出現,程式繼續執行 notice 通知級別的錯誤使用一些未定義變數、常量或者陣列key沒有加引號的時候會出現,程式繼續執行        e_notice      // 執行時通知。表示指令碼遇到可能會表現為錯誤的情況.        e_user_notice // 使用者產生的通知資訊。        waning 警告級別的錯誤程式出問題了,需要修改**!!!程式繼續執行        e_warning         // 執行時警告 (非致命錯誤)。        e_core_warning    // php初始化啟動過程中發生的警告 (非致命錯誤) 。        e_compile_warning // 編譯警告        e_user_warning    // 使用者產生的警告資訊        fatal error 錯誤級別的錯誤程式直接報錯,需要修改**!!!中斷程式執行,可使用register_shutdown_function()函式在程式終止前觸發乙個函式        e_error         // 致命的執行錯誤,錯誤無法恢復,暫停執行指令碼        e_core_error    // php啟動時初始化過程中的致命錯誤        e_compile_error // 編譯時致命性錯,就像由zend指令碼引擎生成了乙個e_error        e_user_error    // 自定義錯誤訊息。像用php函式trigger_error(錯誤型別設定為:e_user_error)        parse error 語法解析錯誤語法檢查階段報錯,需要修改**!!!中斷程式執行,除了修改ini檔案,將錯誤資訊寫到日誌中,什麼也做不了        e_parse  //編譯時的語法解析錯誤
自定義錯誤處理程式有的時候,php 中自帶的錯誤處理程式,並不能完全滿足我們得需要,大部分時候,我們都需要手動重寫異常處理。

php 給我們提供了三個函式來幫助我們來處理,分別是

set_error_handler()

set_exception_handler()

register_shutdown_function()

// 舉例:register_shutdown_function('shutdown'); function shutdown()}$name   //沒寫 ; 號
執行結果emmmmm 這不扯淡嗎?分明分明沒有執行呢?

其實原因使因為,程式執行前,我們 php 會先檢查我們程式的語法問題,如果沒有問題,我們才能執行我們的程式。

我們上面的**沒用通過我們的語法檢查,所以直接報錯。

那麼問題來了?我們在框架中的時候,為什麼是框架都是框架給我們報錯呢?

框架的錯誤處理

在框架中,其**是通過乙個入口檔案來載入的。而我們php檢測語法錯誤的時候,只檢查我們的 index.php 有沒有錯誤, require 檔案中的**是不會受到檢測的。在index.php 檔案中通常會定義一些錯誤異常的處理。當我們**出錯時,那是在 run-time 中檢測的錯誤,我們的框架可以根據我們編寫的錯誤異常自行做出處理。

下面我們舉個例子 在 thinkphp5中的異常處理

在我們的入口檔案中,載入了 base.php 在這個檔案中,tp 定義了自己的異常處理

可以看到 tp是在入口指令碼就註冊了 異常處理機制,分別把 error 、exception、shutdown的處理都註冊進來。後序所有的異常都不會走php原本的異常而是走 tp 自定義的異常。

宜 歲月崢嶸

不忘初心

平庸懶惰

不求上進

聊聊php7 錯誤與異常處理

1,php7 的錯誤機制都會被丟擲乙個異常,普通錯誤會丟擲乙個 errorexception 異常,致命錯誤會丟擲乙個 error 異常。如果沒有定義錯誤處理,異常處理,則會被 php自身預設錯誤異常處理。如果同時自定義了 set error handler 錯誤處理,與 set exception...

php7中異常與錯誤的處理

首先宣告,筆者 php版本 7.2 錯誤的級別 自定義錯誤處理程式 什麼叫做異常?異常是指程式執行中不符合預期情況以及與正常流程不同的狀況。比如你鏈結資料庫,在引數都寫上去的條件下,發現鏈結不上去,這就屬於不符合預期 可以被 try catch 捕捉得到 什麼叫做錯誤?是屬於php程式自身的問題,一...

PHP7 異常處理

php 7 異常用於向下相容及增強舊的assert 函式。它能在生產環境中實現零成本的斷言,並且提供拋出自定義異常及錯誤的能力。老版本的api出於相容目的將繼續被維護,assert 現在是乙個語言結構,它允許第乙個引數是乙個表示式,而不僅僅是乙個待計算的 string或乙個待測試的boolean。a...