没有任何消息我可以使用throw吗?

时间:2016-07-13 04:00:12

标签: php exception-handling try-catch

这是我的代码:

try {

    if ( condition 1 ) {
        throw;
    } else {
        // do something
    }

    // some code here

    if ( condition 2 ){
        throw;
    }

} catch (Exception $e) {
    echo "something is wrong";
}

如您所见,我的catch块有自己的错误消息,并且该消息是常量。所以当我使用throw时,我真的不需要传递消息:

throw new Exception('error message');

我可以在没有任何东西的情况下使用throw吗?我只需要跳进catch块。

老实说写一个无用的错误信息对我来说很烦人。

如您所知,我当前的代码有语法错误:(它指的是throw;

  

解析错误:语法错误,意外&#39 ;;'在{path}

6 个答案:

答案 0 :(得分:7)

message参数在Exception构造函数中是可选的。所以如果你没有/想要放 - 只是不要:

throw new Exception;

但你仍然必须抛出Exception类的实例(或扩展它的类),因为它是php语言语法的一部分。

答案 1 :(得分:3)

如果您希望所有例外都有相同的消息,您可以扩展它并在班级中定义消息:

class AmbiguousException extends Exception {
    public function __construct($message = 'Something is wrong.', $code = 0, Exception $previous = null) {
       parent::__construct($message, $code, $previous);
    } 
}

然后:

throw new AmbiguousException();

答案 2 :(得分:1)

PHP manual中所述:

  

抛出的对象必须是Exception类的实例或Exception的子类。尝试抛出一个不会导致PHP致命错误的对象。

您可以在没有任何消息的情况下抛出异常:

throw new Exception();

也许可以帮助您复制相同异常的内容如下:

$e = new Exception('something is wrong');

try {
    throw $e;
} catch (Exception $ex) {
    echo $ex->getMessage();
}

答案 3 :(得分:1)

您可以在每次需要时使用以下投掷。

throw new Exception();

和catch将与您的代码保持一致。

答案 4 :(得分:1)

您可以使用默认消息创建实例,然后抛出该实例。

$Exception = new Exception("some error message!");
try {
    throw $Exception;
} catch (Exception $ex) {
    var_dump($ex);
}

答案 5 :(得分:0)

您无法单独使用throw关键字。但是,您可以使用throw new Exception();而不指定$message参数,因为它只会回退到默认消息。查看PHP手册中的例外部分:http://php.net/manual/en/language.exceptions.extending.php