资讯专栏INFORMATION COLUMN

【SPL标准库专题(4)】Exceptions

wemall / 3247人阅读

摘要:嵌套异常了解异常之前,我们先了解一下嵌套异常。其中两个可被视为基类逻辑异常和运行时异常两种都继承异常类。其余的方法在逻辑上可以被拆分为组动态调用组,逻辑组和运行时组。运行时组包含异常它由组成。

嵌套异常

了解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...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31502.html

相关文章

  • SPL标准专题(3)】Classes

    摘要:我把分为五个部分,,,,而其中是就是做一些类的介绍与相关的类在各自文章内,在介绍这些类之前,先介绍几个接口数组式访问接口只要实现了这个接口,就可以使得像那样操作。只有内部的类用写的类才可以直接实现接口代码中使用或接口来实现遍历。 我把SPL分为五个部分:Iterator,Classes,Exceptions,Datastructures,Function;而其中classes是就是做一...

    binaryTree 评论0 收藏0
  • SPL标准专题(1)】SPL简介

    摘要:什么是是标准库的缩写。根据官方定义,它是是用于解决典型问题的一组接口与类的集合。而的对象则严格以堆栈的形式描述数据,并提供对应的方法。返回所有已注册的函数。 什么是SPL SPL是Standard PHP Library(PHP标准库)的缩写。 根据官方定义,它是a collection of interfaces and classes that are meant to solve...

    GeekGhc 评论0 收藏0
  • SPL标准专题(10)】Datastructures:SplObjectStorage

    摘要:是用来存储一组对象的,特别是当你需要唯一标识对象的时候。类实现了四个接口。可实现统计迭代序列化数组式访问等功能。 PHP SPL SplObjectStorage是用来存储一组对象的,特别是当你需要唯一标识对象的时候。PHP SPL SplObjectStorage类实现了Countable,Iterator,Serializable,ArrayAccess四个接口。可实现统计、迭代、...

    ConardLi 评论0 收藏0
  • SPL标准专题(9)】Datastructures:SplFixedArray

    摘要:主要是处理数组相关的主要功能,与普通不同的是,它是固定长度的,且以数字为键名的数组,优势就是比普通的数组处理更快。类摘要方法导入数组,返回对象把对象数组导出为真正的数组由于是定长数组,所以超过定长就会抛出异常。 SplFixedArray主要是处理数组相关的主要功能,与普通php array不同的是,它是固定长度的,且以数字为键名的数组,优势就是比普通的数组处理更快。 类摘要 SplF...

    lindroid 评论0 收藏0
  • SPL标准专题(8)】Datastructures:SplHeap & SplMaxHe

    摘要:堆就是为了实现优先队列而设计的一种数据结构,它是通过构造二叉堆二叉树的一种实现。根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。二叉堆还常用于排序堆排序。 堆(Heap)就是为了实现优先队列而设计的一种数据结构,它是通过构造二叉堆(二叉树的一种)实现。根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。二叉堆还常用于排序(堆排序)。 showImg(...

    chadLi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<