【发布时间】:2018-03-03 07:58:53
【问题描述】:
所以我正在制作这个登录应用程序,但我在注册时无法显示正确的错误消息。我希望抛出所有异常,而不仅仅是“try...catch”方法中的一个异常。
这就是设置:
// EXTENDED EXCEPTION CLASSES
class AException extends Exception {
public function __construct($message = null, $code = 0) {
echo $message;
}
}
class BException extends Exception {
public function __construct($message = null, $code = 0) {
echo $message;
}
}
// INDEX.PHP
try {
$register = new RegisterController();
} catch (AException | BException $e) {
$e->getMsg();
}
我有几个可能触发异常的因素,我希望触发和捕获所有异常,例如如果注册表被张贴为空,则应该有一个用户名为空的异常,另一个密码为空的异常等。
class RegisterController {
public function __construct() {
if (!empty($_POST)) {
$this->checkUserInput();
$this->checkPassInput();
}
}
//... executing code
private function checkUserInput() {
if (strlen($_POST['username']) < 3) { // check character length bigger than 3
throw new \AException("Username has too few characters.");
}
}
private function checkPassInput() {
if (strlen($_POST['password']) < 3) { // check character length bigger than 3
throw new \BException("Password has too few characters.");
}
}
}
那么,如何让我的“try...catch”方法同时回显抛出的异常?可能吗?
现在只显示第一个抛出的异常消息,所以我想我需要找到一些方法让脚本在抛出异常后继续......
附:进一步澄清:如果注册表单发布时输入字段为空,例如用户名和密码输入都是空的,我希望代码回显两个异常消息,都是“用户名的字符太少”。和“密码字符太少。”。
【问题讨论】:
-
这不是异常的工作方式。您正在尝试使用异常进行流量控制,这是“不行”。异常意味着立即终止执行。您可能希望将“事件”注册到某个日志设施或目录中,您可以在其中从调用范围内的一个返回读取它们。
标签: php exception exception-handling try-catch