是否可以显示所有捕获而不是仅显示一个?在下面的示例中,如果用户名和电子邮件都错误,我可以输出两个而不是一个。
try {
// Code here
}
catch(WrongUsername $e) {
echo 'Your username is wrong.'
}
catch(WrongEmail $e) {
echo 'Your email is wrong too.'
}
是否可以显示所有捕获而不是仅显示一个?在下面的示例中,如果用户名和电子邮件都错误,我可以输出两个而不是一个。
try {
// Code here
}
catch(WrongUsername $e) {
echo 'Your username is wrong.'
}
catch(WrongEmail $e) {
echo 'Your email is wrong too.'
}
您可能可以遍历所有验证规则并排除所有错误。
$errors = [];
foreach($rules as $rule){
try{
validate($input, $rule);
}catch(Exception $e){
$errors[] = $e->getMessage();
}
}
但是我根本看不到任何使用 try-catch 的理由。
这在 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{} 块永远不会引发多个异常。就编程风格而言,您是否应该为这种操作实际使用异常是有争议的。
如果您想检查一组先决条件并处理每个失败的要求,请不要使用此构造。