摘要:當項目拋出異常時操作那個方法時傳的參數執行操作異常相關操作當前異常類通過異常類名,我們可以知道是訂單支付異常。
引出
如果你調一個類,調用時數據驗證時報了個錯,你會以什么方式返回
數組,布爾值?
數組這個可以帶錯誤原因回來,那布爾值呢?
返回了個 false, 報錯時把錯誤放在類變量里?
還是專門用一個獲取錯誤的方法進行獲取?
上面說的情況是代碼完全沒有問題的情況。
那如果是一些第三方的工具包,你又怎么知道他里面的執行會不會導致整個系統崩潰。
你說本地運行是沒問題的,環境這種東西不好說。
所以我們就用到了 異常 這個東西
下面是我們需要了解的問題
什么時候拋異常?怎么接異常?異常要怎么處理?他的使用場景又是什么?
基礎知識基礎操作
try ... catch()
throw
錯誤級別
致命錯誤 E_ERROR,
語法錯誤 E_PARSE,
警告錯誤 E_WARNING,
通知錯誤 E_NOTICE
php異常處理類
預定義異常
* ErrorException (extends Exception)
SPL異常類
* LogicException (extends Exception) // 表示程序邏輯中的錯誤的異常。這種異常應該直接在代碼中的修復 * BadFunctionCallException // 回調調用未定義的函數或缺少一些參數時會拋出該異常 * BadMethodCallException // 回調方法是一個未定義的方法或缺失一些參數時會拋出該異常 * DomainException // 值不遵守定義的有效數據域時會拋出該異常 * InvalidArgumentException // 參數不是預期類型時會拋出該異常 * LengthException // 長度無效時會拋出該異常 * OutOfRangeException // 請求非法索引時引發的異常,這應該在編譯時就檢測到的錯誤 * RuntimeException (extends Exception) // 在運行時發生的錯誤會拋出該異常 * OutOfBoundsException // 值不是有效鍵時會拋出該異常,這表示在編譯時無法檢測到的錯誤 * OverflowException // 在向完整容器中添加元素時引發的異常 * RangeException // 在程序執行期間為指示范圍錯誤而引發的異常。通常這意味著除了/overflow以外還有一個算術錯誤。這是運行時的DomainException版本 * UnderflowException // 在空容器上執行無效操作(如刪除元素)時引發的異常 * UnexpectedValueException // 值與一組值不匹配時會拋出該異常。通常,當一個函數調用另一個函數并期望返回值為某種類型或值(不包括算術或緩沖區相關錯誤)時,就會發生這種情況
異常處理相關函數
error_reporting // 設置報告的錯誤級別 register_shutdown_function // 注冊一個會在php中止時執行的函數 set_error_handler // 設置用戶自定義的錯誤處理函數 set_exception_handler // 設置用戶自定義的異常處理函數 error_get_last // 獲取最后發生的錯誤使用場景
系統
主要抓的是無法預測的錯誤,統一返回,沒有使用 try...catch 接收的異常直接跳進設置的方法中
工具
定義自定義的異常,一有錯誤直接拋出。使用工具的程序只需通過 Exception 接收異常即可, 所有異常都通過這個進行處理的
db = new PDO($config); if ($this->db == false) { throw new Pdo("連接失敗"); } } } ?>文章例子工具包例子
項目例子
FQA1、為什么要定自定義異常類, 系統不是已經給了很多選擇,而且很多 composer 包里都只是繼承一下。
答:其實自定義異常是為了用區分異常顆粒度的,比如
我定了 訂單異常,商品異常,用戶異常 類,但是 訂單里的異常多種多樣,比如訂單支付異常,訂單生成異常。
* RuntimeException (extends Exception) * Order * Paymen * Created * Goods * User * Withdraw當項目拋出異常時
通過異常類名,我們可以知道是訂單支付異常。這里可以代替錯誤號,而且更清晰明了
2、為什么有一些 composer 包里的自定義異常,有的有很多方法。有什么用處嗎?
作用1:格式化異常
比如:拋出的異常提示是 "id=xx 的用戶不存在",我們會有以下兩種寫法
作用2:組件級別的異常
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/29583.html
摘要:好了,終于寫完了深入理解異常和錯誤處理這個系列了,可能大家平時使用框架開發,基本上不用考慮錯誤和異常,閱讀,評論轉發數量不盡人意,也可能自己水平有限本文由甲爪廣告聯盟整理編輯 前言:有錯就改,錯誤光屏蔽是不行的,還需要對錯誤進行處理和記錄。 內容概要: 1、頂層錯誤處理器的介紹2、示例代碼 一、頂層錯誤處理器的介紹 php在處理錯誤的時候,可以簡單的使用exit()和die()來進行基...
摘要:在本系列的第一篇我們介紹了中最重要的一些不兼容性修復以及兩大新特性。例如這個綠色的心形,,可以表示為字符串。雖然現在它只具備內部測試品質目前已可以下載,但的確讓人期待。向項目報告錯誤,并定期重試。 這是我們期待已久的 PHP 7 系列文章的第二篇。點此閱讀 第一篇本文系 OneAPM 工程師編譯整理。 也許你已經知道,重頭戲 PHP 7 的發布將在今年到來!現在,讓我們來了解一下,新版...
摘要:深入協議從功能上來講,協議已經完全能夠解決服務器與應用之間的數據通信問題。消息頭信息主要的消息頭信息如下用于表示協議版本號。從服務器發送到應用,表示中止一個處理中的請求。另外我們還需要明確一點就是服務器與進程間通信是無序的。 本文首發于 深入剖析 Web 服務器與 PHP 應用之間的通信機制 - 掌握 CGI 和 FastCGI 協議的運行原理,轉載請注明出處! 身為一名使用 PHP ...
摘要:雖然容易入門,但是要想深入,還是有些路要走的,今天我們就來聊聊一些比較難理解的知識點。至于的第三種用法請看下面的。如果大家覺得這篇文章還不錯,請給予一個贊或者分享給你的好友,如果你有更多好的經驗或問題,請在評論中和大家分享一下。 php雖然容易入門,但是要想深入,還是有些路要走的,今天我們就來聊聊php一些比較難理解的知識點。use php從5.3.0開始引入了一個叫作命名空間的新特征...
閱讀 2989·2021-11-23 09:51
閱讀 3007·2021-11-02 14:46
閱讀 870·2021-11-02 14:45
閱讀 2751·2021-09-23 11:57
閱讀 2501·2021-09-23 11:22
閱讀 1932·2019-08-29 16:29
閱讀 749·2019-08-29 16:16
閱讀 947·2019-08-26 13:44