4

这是您将值(下面示例中的“用户名”)传递给自定义异常的方式吗?问题是我会使用__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");
        }
    }
}

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

话虽如此,我个人不喜欢像您正在做的那样使用异常来执行应用程序流逻辑的想法。对我来说,自定义异常对于与自定义日志系统交互很有用,或者能够记录应用程序状态中默认异常类不可用的方面。

于 2012-10-16T00:50:11.930 回答