将变量/值传递给自定义异常?

时间:2012-10-16 00:38:32

标签: php

这是如何将值(下面示例中的“用户名”)传递给自定义异常的?问题是我会使用__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)的目的是什么?这不是多余的吗?

1 个答案:

答案 0 :(得分:0)

你的构造函数根本没有理由。我建议您使用$this->getMessage()来访问您要设置为$this->e的值。

所以做这样的事情:

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

它更直接,只扩展了基类的功能,而不是不必要地覆盖了构造函数。

话虽如此,我个人并不喜欢使用异常来执行应用程序流逻辑,就像你正在做的那样。对我来说,自定义异常对于与自定义日志记录系统的接口很有用,或者能够记录通过默认Exception类不可用的应用程序状态的各个方面。