栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

更新:

从PHP 7.1开始,此功能可用。

语法为:

try{    // Some pre...}catch(AError | BError $e){    // Handle exceptions}catch(Exception $e){    // Handle the general case}

文件:https://www.php.net/manual/en/language.exceptions.php#example-287

RFC:https://wiki.php.net/rfc/multiple-catch

提交:https : //github.com/php/php-
src/commit/0aed2cc2a440e7be17552cc669d71fdd24d1204a


对于7.1之前的PHP:

尽管这些什么其他的答案说,你可以赶上

AError
BError
在同一个块(这是比较容易,如果你是一个定义例外)。即使存在您要“掉线”的例外,您仍然应该能够定义层次结构来满足您的需求。

abstract class MyExceptions extends Exception {}abstract class LetterError extends MyExceptions {}class AError extends LetterError {}class BError extends LetterError {}

然后:

catch(LetterError $e){    //voodoo}

正如您在此处和此处所看到的,即使

SPL
默认异常也具有可以利用的层次结构。另外,如PHP手册中所述:

引发异常时,将不执行该语句之后的代码, PHP将尝试查找第一个匹配的catch块。

这意味着您也可以

class CError extends LetterError {}

您需要使用不同于

AError
或的方式进行处理
BError
,因此catch语句应如下所示:

catch(CError $e){    //voodoo}catch(LetterError $e){    //voodoo}

如果您有二十多个或更多合法属于同一超类的异常,并且您需要以一种方式处理五个(或其他大型集团),其余以另一种方式处理,那么您仍然可以这样做。

interface Group1 {}class AError extends LetterError implements Group1 {}class BError extends LetterError implements Group1 {}

然后:

catch (Group1 $e) {}

涉及异常时使用OOP非常强大。使用像

get_class
或者
instanceof
是黑客,如果可能,应尽量避免。

我想添加的另一个解决方案是将异常处理功能放入其自己的方法中。

你可以有

function handleExceptionMethod1(Exception $e){    //voodoo}function handleExceptionMethod2(Exception $e){    //voodoo}

假设是绝对没有办法,你可以控制的异常类层次结构或接口(也有几乎总是 是一个方法),你可以做到以下几点:

try{    stuff()}catch(ExceptionA $e){    $this->handleExceptionMethod1($e);}catch(ExceptionB $e){    $this->handleExceptionMethod1($e);}catch(ExceptionC $e){    $this->handleExceptionMethod1($e);}catch(Exception $e){    $this->handleExceptionMethod2($e);}

这样,如果您的异常处理机制需要更改,并且您仍在OOP的常规构造中工作,则您仅需修改一个代码位置。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/466109.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号