首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在一个catch块中捕获多个异常类型

在一个catch块中捕获多个异常类型
EN

Stack Overflow用户
提问于 2011-12-09 08:22:38
回答 8查看 212.1K关注 0票数 292

我想要一种更简洁的方式来获得以下功能,在一个块中捕获AErrorBError

代码语言:javascript
运行
复制
try
{
    /* something */
}
catch( AError, BError $e )
{
    handler1( $e )
}
catch( Exception $e )
{
    handler2( $e )
}

有没有办法做到这一点?或者我必须单独捕获它们?

AErrorBerror有一个共享的基类,但它们也与其他类型共享它,我希望通过handler2来实现,所以我不能只捕获基类。

EN

回答 8

Stack Overflow用户

发布于 2016-05-03 03:57:27

引入PHP 7.1的是捕获多种类型的能力。

所以这是:

代码语言:javascript
运行
复制
<?php
try {
    /* ... */
} catch (FirstException $ex) {
    $this->manageException($ex);
} catch (SecondException $ex) {
    $this->manageException($ex);
}
?>

代码语言:javascript
运行
复制
<?php
try {

} catch (FirstException | SecondException $ex) {
    $this->manageException($ex);
}
?>

在功能上等同。

票数 90
EN

Stack Overflow用户

发布于 2016-05-30 17:20:53

从PHP 7.1开始,

代码语言:javascript
运行
复制
catch( AError | BError $e )
{
    handler1( $e )
}

有趣的是,您还可以:

代码语言:javascript
运行
复制
catch( AError | BError $e )
{
    handler1( $e )
} catch (CError $e){
    handler2($e);
} catch(Exception $e){
    handler3($e);
}

在PHP的早期版本中:

代码语言:javascript
运行
复制
catch(Exception $ex){
    if($ex instanceof AError || $ex instanceof BError){
        //handle AError and BError
    } elseif($ex instanceof CError){
        //handle CError
    } else {
       throw $ex; // an unknown exception occurred, throw it further
    }
}
票数 51
EN

Stack Overflow用户

发布于 2012-07-06 01:50:41

作为可接受答案的扩展,您可以切换异常类型,从而得到类似于原始示例的模式:

代码语言:javascript
运行
复制
try {

    // Try something

} catch (Exception $e) {

    switch (get_class($e)) {

        case 'AError':
        case 'BError':
            // Handle A or B
            break;

        case 'CError':
            // Handle C
            break;

        case default:
            // Rethrow the Exception
            throw $e;

    }

}
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8439581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档