我在包含的类环境中访问一个函数,该类可以抛出一个警报,该警报需要将用户引导回一个包含错误信息的页面。对我来说,引用页面的最佳方式是什么,以便在任何地方从任何地方访问该函数时都可以使用它?
有没有更好的方法来做我想做的事情?
public function checkEnvironment() {
try {
// If status is false
if (!$this->getStatus()) {
// Generate a new special exception with code
throw new Alert(6);
} else {
$connection = Gateway::checkInstance();
return $connection->getData('SELECT * FROM control_environment WHERE subdomain = ?', array($this->subdomain[0]));
}
} catch (Alert $alert) {
$_SESSION['error'] = $alert->getData();
if (!headers_sent()) {
header('Location: my/file/here.php');
exit;
}
}
}
答案 0 :(得分:1)
你严重滥用例外。绝对没有理由在try
块中放置一个if语句,它只能抛出一个类型的异常,保证在该块之后立即捕获。你没有为你的代码添加任何东西,但是混乱,实际上没有优势,只需执行if / else而没有异常/捕获。
例外的一点是,你将从当前范围推出,到了可以以有意义的方式实际处理的地方。
选择真正的异常类,该异常类可以传达有关发生的错误的信息。 Alert(6)
并没有告诉任何人。然后,在此之上处理该(可能还有许多其他)异常,您可以更加确定重定向是正确的操作过程。您的低级数据库代码不应具有任何概念的浏览器或http或重定向。
当else
分支的目的是抛出异常时,您的代码也不应该有if
分支。 else
是多余的。
整个功能应如下所示。
public function checkEnvironment() {
if (!$this->getStatus())
// Generate a new special exception with code
throw new StatusException;
$connection = Gateway::checkInstance();
return $connection->getData('SELECT * FROM control_environment WHERE subdomain = ?', array($this->subdomain[0]));
}