日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php异常处理机制

發布時間:2023/12/1 php 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php异常处理机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:https://www.cnblogs.com/water0729/p/5802476.html

php異常我們常接觸到的就是error錯誤碼1,warning錯誤碼2,notice錯誤碼8這三類。出現error了系統是掛掉了,但是warning和notice是我們可以捕捉并處理的

?

php配置項
display_errors=On On將錯誤顯示到瀏覽器上,不管是On還是Off都會記錄到你錯誤日志里面,前提是配置了錯誤日志log_errors和error_log

error_reporting 設置錯誤報告級別,這個與display_errors和error_log有關,只會將對應的錯誤記錄在錯誤日志或者打印到瀏覽器上


php錯誤處理機制
php本身有一套錯誤處理機制,就是通過display_errors error_reporting來控制
所以默認情況下,在代碼出現問題,notice warning等消息時,會直接打印到瀏覽器上,而且還會繼續往下執行,這個時候你通過 try catch根本捕捉不到,這就和我理解的不太一樣,
因為我以為的會是錯誤直接被我catch捕捉到,

所以php的try catch 能捕捉到的只能是你自己 throw new Exception("");的錯誤,throw之后的語句會進入到catch中繼續執行。

如果你想拋棄php自身的錯誤處理機制,這個時候可以通過set_error_handler這個函數,自定義一個函數用來處理,再這個函數中你可以拋出異常,然后再通過catch捕捉到異常。


這樣的意義就是,當出現notice和warning時,比如在mysql連接失敗時,會出現warning,但是這個warning你又不能直接通過catch捕捉到,不考慮關閉display_errors,
然后設置error_reporting,通過判斷connect返回的句柄,來手動throw拋出異常

?

set_error_handler()也不能用來處理所有的錯誤級別,官方手冊上是這樣說的:

The following error types cannot be handled with a user defined function:?
E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING,?
and most of E_STRICT raised in the file where set_error_handler() is called.

?

最后再提供一個小技巧,對于需要使用第三方類的時候可以考慮這樣子

?

1.通過__call()方法,這樣做的好處就是避免了,再使用沒有定義的方法的時候,會報error的錯誤,error是會讓整個系統掛掉的。

2.第二個方面配合set_error_handler()方法設置的自定義錯誤處理函數,就相當于在調用函數方法的過程中就已經封裝了異常處理,我們只需要判斷函數處理結果是false(或者是其他的一個字符串)就好了??梢杂脕砼袛嗪瘮凳欠裾{用失敗,比如connect。

?

還有一點需要注意的是,php throw出來的異常,必須要catch到,不然會報錯。php的異常也像JAVA的異常的一樣,可以在最外層catch捕捉,也可以在throw的地方捕捉。

轉載于:https://www.cnblogs.com/xiaqiuchu/articles/10398530.html

總結

以上是生活随笔為你收集整理的php异常处理机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。