【发布时间】:2012-04-15 17:54:03
【问题描述】:
这可能是一个很糟糕的问题,但无论如何。可以使用异常进行表单验证吗?假设我有一个询问用户姓名和电子邮件的表单,这样做是否正确?
try {
if (empty($_POST["name"])) {
throw new UserRegistrationException("Your name cannot be empty.");
}
if (filter_var($_POST["email"])) {
throw new UserRegistrationException("Invalid email");
}
// Save new user into database
} catch (UserRegistrationException $e) {
// Show errors on screen
}
另外 - 如果这实际上是正确的方法 - 如果用户提交 both 一个空名称和一个无效的电子邮件,这两个异常会执行还是只执行第一个出现的异常(本例中的名称)?
顺便说一句,我正在使用PHP。
【问题讨论】:
-
这绝对是一种奇怪的异常使用方式。 “两个异常都会执行还是只执行第一个出现的异常”——写 5 行代码并看到自己有那么难吗?
-
只有第一个会被抛出和捕捉,其他的会被跳过。如果您需要累积错误消息,最好只使用普通的旧 if/else 链并将消息附加到数组中。
-
@Michael 我是这么认为的......虽然使用异常似乎是一个很好的场合(因为无效输入应该被视为异常),但我会坚持if/else的
-
@John Doe:无效输入是预期的。例外情况是 HDD 上没有剩余空间或 DBMS 关闭。
-
@zerkms 这是什么标准?不,不希望出现无效输入,但它很常见,您必须随时准备好捕捉它。硬盘上没有剩余空间不太常见,这是唯一的区别
标签: php exception exception-handling validation