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...