0

是否可以显示所有捕获而不是仅显示一个?在下面的示例中,如果用户名和电子邮件都错误,我可以输出两个而不是一个。

try {
    // Code here
}
catch(WrongUsername $e) {
    echo 'Your username is wrong.'
}
catch(WrongEmail $e) {
    echo 'Your email is wrong too.'
}
4

2 回答 2

0

您可能可以遍历所有验证规则并排除所有错误。

$errors = [];
foreach($rules as $rule){
   try{
      validate($input, $rule);
   }catch(Exception $e){
      $errors[] = $e->getMessage();
   }
}

但是我根本看不到任何使用 try-catch 的理由。

于 2013-06-12T08:15:33.637 回答
-1

这在 PHP 中并没有多大意义——它是动态的,不是固定类型的,并且不支持重载。在您的示例中,“WrongEmail”是异常类还是异常消息?子分类异常有好处吗?

如果它是异常的消息属性,则将其更改为使用更多信息...

 try {
      ...
      if (!preg_match($pattern, $username)) 
         throw new Exception('Your username is wrong.');
      ...
 } catch ($e) {
      echo $e->message;
 }

如果您有充分的理由对异常进行子分类...

 try {
      ...
 } catch ($e) {
    switch (get_class($e)) {
       case 'WrongUsername':
           echo 'Your username is wrong.';
           break;
       case 'WrongEmail':
           echo 'Your email is wrong.'
           break;
       ...
    }
 }

但是异常是流控制结构的一部分——当你抛出异常时,你会改变执行流程。try{} 块永远不会引发多个异常。就编程风格而言,您是否应该为这种操作实际使用异常是有争议的。

如果您想检查一组先决条件并处理每个失败的要求,请不要使用此构造。

于 2013-06-12T08:31:52.867 回答