在PHP中显示多个catch消息

时间:2013-06-12 08:09:58

标签: php

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

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

2 个答案:

答案 0 :(得分:0)

您可以循环执行所有验证规则并捕获所有错误。

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

但是我认为没有任何理由可以使用try-catch。

答案 1 :(得分:-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 {}块永远不会引发多个异常。在编程风格方面,你是否应该实际使用异常进行这种操作是值得商榷的。

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