国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

php異常處理的深入

shadowbook / 591人閱讀

摘要:當(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)目例子

FQA

1、為什么要定自定義異常類, 系統(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

相關(guān)文章

  • 深入理解PHP異常和錯(cuò)誤處理(6)PHP如何優(yōu)雅處理錯(cuò)誤

    摘要:好了,終于寫完了深入理解異常和錯(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)行基...

    Alliot 評(píng)論0 收藏0
  • PHP 7 值得期待新特性(下)

    摘要:在本系列的第一篇我們介紹了中最重要的一些不兼容性修復(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)了解一下,新版...

    BetaRabbit 評(píng)論0 收藏0
  • 深入剖析 Web 服務(wù)器與 PHP 應(yīng)用之間通信機(jī)制 - 掌握 CGI 和 FastCGI 協(xié)議

    摘要:深入?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 ...

    mumumu 評(píng)論0 收藏0
  • PHP小知識(shí)點(diǎn)

    摘要:那些瑣碎的知識(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í)...

    hover_lew 評(píng)論0 收藏0
  • PHP知識(shí)難點(diǎn)TOP3,挑戰(zhàn)一下你

    摘要:雖然容易入門,但是要想深入,還是有些路要走的,今天我們就來(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è)叫作命名空間的新特征...

    mdluo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<