成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【SPL標(biāo)準(zhǔn)庫(kù)專題(4)】Exceptions

wemall / 3255人閱讀

摘要:嵌套異常了解異常之前,我們先了解一下嵌套異常。其中兩個(gè)可被視為基類邏輯異常和運(yùn)行時(shí)異常兩種都繼承異常類。其余的方法在邏輯上可以被拆分為組動(dòng)態(tài)調(diào)用組,邏輯組和運(yùn)行時(shí)組。運(yùn)行時(shí)組包含異常它由組成。

嵌套異常

了解SPL異常之前,我們先了解一下嵌套異常。嵌套異常顧名思義就是異常里面再嵌套異常,一個(gè)異常拋出,在catch到以后再拋出異常,這時(shí)可以通過(guò)Exception基類的getPrevious方法可以獲得嵌套異常;

executeQuery($sql);
} catch (DBException $e) {
    echo "General Error: " . $e->getMessage() . "
";
    // 調(diào)用被捕獲異常的getPrevious()獲得嵌套異常
    $pdoException = $e->getPrevious();
    echo "PDO Specific error: " . $pdoException->getMessage() . "
";
}
SPL異常

簡(jiǎn)要的說(shuō)一下SPL異常的優(yōu)點(diǎn):

可以為異常拋出提供分類,方便后續(xù)有選擇性的catch異常;

異常語(yǔ)義化更具體,BadFunctionCallException一看就知道是調(diào)用錯(cuò)誤的未定義方法拋出的錯(cuò)誤;

SPL中有總共13個(gè)新的異常類型。其中兩個(gè)可被視為基類:邏輯異常(LogicException )和運(yùn)行時(shí)異常(RuntimeException);兩種都繼承php異常類。其余的方法在邏輯上可以被拆分為3組:動(dòng)態(tài)調(diào)用組,邏輯組和運(yùn)行時(shí)組。

動(dòng)態(tài)調(diào)用組包含異常 BadFunctionCallException和BadMethodCallException,BadMethodCallException是BadFunctionCallException(LogicException的子類)的子類。

// OO variant 
class Foo 
{ 
    public function __call($method, $args) 
    { 
        switch ($method) { 
            case "doBar": /* ... */ break; 
            default: 
                throw new BadMethodCallException("Method " . $method . " is not callable by this object"); 
        } 
    } 
  
} 
  
// procedural variant 
function foo($bar, $baz) { 
    $func = "do" . $baz; 
    if (!is_callable($func)) { 
        throw new BadFunctionCallException("Function " . $func . " is not callable"); 
    } 
} 

邏輯(logic )組包含異常: DomainException、InvalidArgumentException、LengthException、OutOfRangeException組成。

運(yùn)行時(shí)(runtime )組包含異常:
它由OutOfBoundsException、OverflowException、RangeException、UnderflowException、UnexpectedValueExceptio組成。

class Foo 
{ 
    protected $number = 0; 
    protected $bar = null; 
  
    public function __construct($options) 
    { 
        /** 本方法拋出LogicException異常 **/ 
    } 
      
    public function setNumber($number) 
    { 
        /** 本方法拋出LogicException異常 **/ 
    } 
      
    public function setBar(Bar $bar) 
    { 
        /** 本方法拋出LogicException異常 **/ 
    } 
      
    public function doSomething($differentNumber) 
    { 
        if ($differentNumber != $expectedCondition) { 
            /** 在這里,拋出LogicException異常 **/ 
        } 
          
        /** 
         * 在這里,本方法拋出RuntimeException異常 
         */  
    } 
  
} 
自定義其它異常
class ThrowableError extends ErrorException
{
    public function __construct(Throwable $e)
    {
        // 可以通過(guò)instanceof來(lái)判斷異常分類(做一個(gè)映射)
        if ($e instanceof ParseError) {
            $message  = "Parse error: " . $e->getMessage();
            $severity = E_PARSE;
        } elseif ($e instanceof TypeError) {
            $message  = "Type error: " . $e->getMessage();
            $severity = E_RECOVERABLE_ERROR;
        } else {
            $message  = "Fatal error: " . $e->getMessage();
            $severity = E_ERROR;
        }
    }
}
鏈接參考

http://cn.php.net/manual/zh/c...
http://cn.php.net/manual/zh/s...
http://www.oschina.net/transl...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31502.html

相關(guān)文章

  • SPL標(biāo)準(zhǔn)庫(kù)專題(3)】Classes

    摘要:我把分為五個(gè)部分,,,,而其中是就是做一些類的介紹與相關(guān)的類在各自文章內(nèi),在介紹這些類之前,先介紹幾個(gè)接口數(shù)組式訪問(wèn)接口只要實(shí)現(xiàn)了這個(gè)接口,就可以使得像那樣操作。只有內(nèi)部的類用寫(xiě)的類才可以直接實(shí)現(xiàn)接口代碼中使用或接口來(lái)實(shí)現(xiàn)遍歷。 我把SPL分為五個(gè)部分:Iterator,Classes,Exceptions,Datastructures,F(xiàn)unction;而其中classes是就是做一...

    binaryTree 評(píng)論0 收藏0
  • SPL標(biāo)準(zhǔn)庫(kù)專題(1)】SPL簡(jiǎn)介

    摘要:什么是是標(biāo)準(zhǔn)庫(kù)的縮寫(xiě)。根據(jù)官方定義,它是是用于解決典型問(wèn)題的一組接口與類的集合。而的對(duì)象則嚴(yán)格以堆棧的形式描述數(shù)據(jù),并提供對(duì)應(yīng)的方法。返回所有已注冊(cè)的函數(shù)。 什么是SPL SPL是Standard PHP Library(PHP標(biāo)準(zhǔn)庫(kù))的縮寫(xiě)。 根據(jù)官方定義,它是a collection of interfaces and classes that are meant to solve...

    GeekGhc 評(píng)論0 收藏0
  • SPL標(biāo)準(zhǔn)庫(kù)專題(10)】Datastructures:SplObjectStorage

    摘要:是用來(lái)存儲(chǔ)一組對(duì)象的,特別是當(dāng)你需要唯一標(biāo)識(shí)對(duì)象的時(shí)候。類實(shí)現(xiàn)了四個(gè)接口。可實(shí)現(xiàn)統(tǒng)計(jì)迭代序列化數(shù)組式訪問(wèn)等功能。 PHP SPL SplObjectStorage是用來(lái)存儲(chǔ)一組對(duì)象的,特別是當(dāng)你需要唯一標(biāo)識(shí)對(duì)象的時(shí)候。PHP SPL SplObjectStorage類實(shí)現(xiàn)了Countable,Iterator,Serializable,ArrayAccess四個(gè)接口??蓪?shí)現(xiàn)統(tǒng)計(jì)、迭代、...

    ConardLi 評(píng)論0 收藏0
  • SPL標(biāo)準(zhǔn)庫(kù)專題(9)】Datastructures:SplFixedArray

    摘要:主要是處理數(shù)組相關(guān)的主要功能,與普通不同的是,它是固定長(zhǎng)度的,且以數(shù)字為鍵名的數(shù)組,優(yōu)勢(shì)就是比普通的數(shù)組處理更快。類摘要方法導(dǎo)入數(shù)組,返回對(duì)象把對(duì)象數(shù)組導(dǎo)出為真正的數(shù)組由于是定長(zhǎng)數(shù)組,所以超過(guò)定長(zhǎng)就會(huì)拋出異常。 SplFixedArray主要是處理數(shù)組相關(guān)的主要功能,與普通php array不同的是,它是固定長(zhǎng)度的,且以數(shù)字為鍵名的數(shù)組,優(yōu)勢(shì)就是比普通的數(shù)組處理更快。 類摘要 SplF...

    lindroid 評(píng)論0 收藏0
  • SPL標(biāo)準(zhǔn)庫(kù)專題(8)】Datastructures:SplHeap & SplMaxHe

    摘要:堆就是為了實(shí)現(xiàn)優(yōu)先隊(duì)列而設(shè)計(jì)的一種數(shù)據(jù)結(jié)構(gòu),它是通過(guò)構(gòu)造二叉堆二叉樹(shù)的一種實(shí)現(xiàn)。根節(jié)點(diǎn)最大的堆叫做最大堆或大根堆,根節(jié)點(diǎn)最小的堆叫做最小堆或小根堆。二叉堆還常用于排序堆排序。 堆(Heap)就是為了實(shí)現(xiàn)優(yōu)先隊(duì)列而設(shè)計(jì)的一種數(shù)據(jù)結(jié)構(gòu),它是通過(guò)構(gòu)造二叉堆(二叉樹(shù)的一種)實(shí)現(xiàn)。根節(jié)點(diǎn)最大的堆叫做最大堆或大根堆,根節(jié)點(diǎn)最小的堆叫做最小堆或小根堆。二叉堆還常用于排序(堆排序)。 showImg(...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<