php7中異常與錯誤的處理

2021-08-26 15:09:03 字數 2429 閱讀 4081

首先宣告,筆者 php版本 7.2

錯誤的級別

自定義錯誤處理程式

什麼叫做異常?

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

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

可以被 try-catch 捕捉得到

什麼叫做錯誤?

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

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

例如:

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

異常處理

在以前的 php5.x 中 並且不能被 try-catch 捕捉得到,到了 php 7.x 中,定義了乙個 throwable 介面 並使得大部分的 error 和

exception 實現了該介面,我們得以在 try-catch 中丟擲該錯誤

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

try

catch(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 是不會受到檢測的。當我們**出錯時,那是在 run-time 中檢測的錯誤,所以我們框架中的可以相應錯誤

本文參考資料

- 在談php 錯誤與異常處理

- php錯誤與異常

- php中的異常和錯誤解析

聊聊php7 錯誤與異常處理

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

php7中的異常和錯誤處理

在php7.版本中,一些error和exception可以通過try catch語句捕獲到 可捕獲的異常 錯誤大致有以下三種 error php核心丟擲錯誤的專用型別,如類不存在,函式不存在,函式引數錯誤,都會丟擲此型別的錯誤,php 中不應該使用error類來作為異常丟擲 exception 應用...

PHP7 異常處理

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