摘要:嵌套異常了解異常之前,我們先了解一下嵌套異常。其中兩個可被視為基類邏輯異常和運行時異常兩種都繼承異常類。其余的方法在邏輯上可以被拆分為組動態調用組,邏輯組和運行時組。運行時組包含異常它由組成。
嵌套異常
了解SPL異常之前,我們先了解一下嵌套異常。嵌套異常顧名思義就是異常里面再嵌套異常,一個異常拋出,在catch到以后再拋出異常,這時可以通過Exception基類的getPrevious方法可以獲得嵌套異常;
executeQuery($sql); } catch (DBException $e) { echo "General Error: " . $e->getMessage() . " "; // 調用被捕獲異常的getPrevious()獲得嵌套異常 $pdoException = $e->getPrevious(); echo "PDO Specific error: " . $pdoException->getMessage() . " "; }SPL異常
簡要的說一下SPL異常的優點:
可以為異常拋出提供分類,方便后續有選擇性的catch異常;
異常語義化更具體,BadFunctionCallException一看就知道是調用錯誤的未定義方法拋出的錯誤;
SPL中有總共13個新的異常類型。其中兩個可被視為基類:邏輯異常(LogicException )和運行時異常(RuntimeException);兩種都繼承php異常類。其余的方法在邏輯上可以被拆分為3組:動態調用組,邏輯組和運行時組。
動態調用組包含異常 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組成。
運行時(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) { // 可以通過instanceof來判斷異常分類(做一個映射) 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...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31502.html
摘要:我把分為五個部分,,,,而其中是就是做一些類的介紹與相關的類在各自文章內,在介紹這些類之前,先介紹幾個接口數組式訪問接口只要實現了這個接口,就可以使得像那樣操作。只有內部的類用寫的類才可以直接實現接口代碼中使用或接口來實現遍歷。 我把SPL分為五個部分:Iterator,Classes,Exceptions,Datastructures,Function;而其中classes是就是做一...
摘要:什么是是標準庫的縮寫。根據官方定義,它是是用于解決典型問題的一組接口與類的集合。而的對象則嚴格以堆棧的形式描述數據,并提供對應的方法。返回所有已注冊的函數。 什么是SPL SPL是Standard PHP Library(PHP標準庫)的縮寫。 根據官方定義,它是a collection of interfaces and classes that are meant to solve...
摘要:是用來存儲一組對象的,特別是當你需要唯一標識對象的時候。類實現了四個接口??蓪崿F統計迭代序列化數組式訪問等功能。 PHP SPL SplObjectStorage是用來存儲一組對象的,特別是當你需要唯一標識對象的時候。PHP SPL SplObjectStorage類實現了Countable,Iterator,Serializable,ArrayAccess四個接口??蓪崿F統計、迭代、...
摘要:主要是處理數組相關的主要功能,與普通不同的是,它是固定長度的,且以數字為鍵名的數組,優勢就是比普通的數組處理更快。類摘要方法導入數組,返回對象把對象數組導出為真正的數組由于是定長數組,所以超過定長就會拋出異常。 SplFixedArray主要是處理數組相關的主要功能,與普通php array不同的是,它是固定長度的,且以數字為鍵名的數組,優勢就是比普通的數組處理更快。 類摘要 SplF...
摘要:堆就是為了實現優先隊列而設計的一種數據結構,它是通過構造二叉堆二叉樹的一種實現。根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。二叉堆還常用于排序堆排序。 堆(Heap)就是為了實現優先隊列而設計的一種數據結構,它是通過構造二叉堆(二叉樹的一種)實現。根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。二叉堆還常用于排序(堆排序)。 showImg(...
閱讀 798·2023-04-25 22:57
閱讀 3051·2021-11-23 10:03
閱讀 613·2021-11-22 15:24
閱讀 3156·2021-11-02 14:47
閱讀 2901·2021-09-10 11:23
閱讀 3115·2021-09-06 15:00
閱讀 3936·2019-08-30 15:56
閱讀 3322·2019-08-30 15:52