0

我在包含的类 Environment 中访问一个函数,该函数可以引发一个警报,该警报需要将用户引导回包含一些错误信息的页面。什么是我引用页面的最佳方式,以便在我从任何地方访问该功能的任何地方都可以使用它?

有没有更好的方法来做我想做的事情?

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;
            }

        }

    }
4

1 回答 1

1

你严重滥用异常。绝对没有理由将单个 if 语句放在一个try块中,它只能抛出一种类型的异常,该异常保证在该块之后立即被捕获。除了混乱之外,您没有在代码中添加任何内容,与简单地执行 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]));

}
于 2013-02-14T18:36:33.153 回答