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