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 ステートメントを配置する理由はまったくありません。これは、そのブロックの直後にキャッチされることが保証されている1 つの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 に答える