摘要:嵌套異常了解異常之前,我們先了解一下嵌套異常。其中兩個(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
摘要:我把分為五個(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是就是做一...
摘要:什么是是標(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...
摘要:是用來(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ì)、迭代、...
摘要:主要是處理數(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...
摘要:堆就是為了實(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(...
閱讀 811·2023-04-25 22:57
閱讀 3061·2021-11-23 10:03
閱讀 623·2021-11-22 15:24
閱讀 3167·2021-11-02 14:47
閱讀 2910·2021-09-10 11:23
閱讀 3128·2021-09-06 15:00
閱讀 3950·2019-08-30 15:56
閱讀 3336·2019-08-30 15:52