4

これは、カスタム例外に値(以下の例では「username」)を渡す方法ですか?質問は私が使用し__construct()ますか?重要な変数が過剰に設定されているかどうかを確認するためにカスタム例外を使用していますか?

class customException extends Exception {

    public function __construct($e) {
        parent::__construct($e); // makes sure variable is set? [1]
        $this->e = $e;
    }
    public function redirect_user() {
        if($this->e === "username") {
            header("Location: ");
        }
    }
}

class testing {

    public function test() {
        try {
            if(!isset($_POST['username'])) {
                throw new customException("username");
            }
        }
        catch(customException $e) {
            $e->redirect_user();
        }
    }
}

[1] http://php.net/manual/en/language.exceptions.extending.php#example-266

ちなみに、目的はparent::__construct($e)何ですか?それは冗長ではないでしょうか?

4

1 に答える 1

0

コンストラクターの理由はまったくありません。$this->getMessage()に設定しようとしている値にアクセスするためにを使用することをお勧めします$this->e

したがって、次のようなことを行います。

class customException extends Exception {
    public function redirect_user() {
        if($this->getMessage() === "username") {
            print_r("Header");
        }
    }
}

これははるかに簡単で、コンストラクターを不必要にオーバーライドするのではなく、基本クラスの機能を拡張するだけです。

そうは言っても、私は個人的に、あなたがしているように例外を使用してアプリケーションフローロジックを実行するという考えは好きではありません。私にとって、カスタム例外は、カスタムロギングシステムとのインターフェイス、またはデフォルトのExceptionクラスでは利用できないアプリケーションの状態の側面をログに記録できるようにするために役立ちます。

于 2012-10-16T00:50:11.930 に答える