是否可以显示所有捕获而不是仅显示一个?在下面的示例中,如果用户名和电子邮件都是错误的,我可以输出两个而不是一个。
try {
// Code here
}
catch(WrongUsername $e) {
echo 'Your username is wrong.'
}
catch(WrongEmail $e) {
echo 'Your email is wrong too.'
}
答案 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 {}块永远不会引发多个异常。在编程风格方面,你是否应该实际使用异常进行这种操作是值得商榷的。
如果要检查一组前置条件并处理每个失败的要求,请不要使用此构造。