我想要一种更简洁的方式来获得以下功能,在一个块中捕获AError和BError:
try
{
/* something */
}
catch( AError, BError $e )
{
handler1( $e )
}
catch( Exception $e )
{
handler2( $e )
}有没有办法做到这一点?或者我必须单独捕获它们?
AError和Berror有一个共享的基类,但它们也与其他类型共享它,我希望通过handler2来实现,所以我不能只捕获基类。
发布于 2016-05-03 03:57:27
引入PHP 7.1的是捕获多种类型的能力。
所以这是:
<?php
try {
/* ... */
} catch (FirstException $ex) {
$this->manageException($ex);
} catch (SecondException $ex) {
$this->manageException($ex);
}
?>和
<?php
try {
} catch (FirstException | SecondException $ex) {
$this->manageException($ex);
}
?>在功能上等同。
发布于 2016-05-30 17:20:53
从PHP 7.1开始,
catch( AError | BError $e )
{
handler1( $e )
}有趣的是,您还可以:
catch( AError | BError $e )
{
handler1( $e )
} catch (CError $e){
handler2($e);
} catch(Exception $e){
handler3($e);
}在PHP的早期版本中:
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
}
}发布于 2012-07-06 01:50:41
作为可接受答案的扩展,您可以切换异常类型,从而得到类似于原始示例的模式:
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;
}
}https://stackoverflow.com/questions/8439581
复制相似问题