【问题标题】:Can I use throw without any message?我可以在没有任何消息的情况下使用 throw 吗?
【发布时间】:2016-07-13 04:00:12
【问题描述】:

这是我的代码:

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;

解析错误:语法错误,意外';'在{路径}

【问题讨论】:

  • 您需要抛出Exception 类的实例。如果您没有消息 - 不要写它:throw new Exception();
  • @Marty 正如我所说,这个错误something is wrong 对于所有throws 总是固定的.. 那我为什么要写几次呢?!!
  • 异常应该提供有用的信息。当您回到应用程序上工作并不断看到极其模棱两可的“有问题”时,您会想打自己的脸。
  • @zerkms Emm 不知道你的意思.. 你能写一个答案吗?
  • 我的意思是:如果您不将消息放入异常构造函数中 - 只是不要:throw new Exception();

标签: php exception-handling try-catch


【解决方案1】:

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

throw new Exception;

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

【讨论】:

    【解决方案2】:

    如果您希望所有异常都具有相同的消息,您可以扩展它并在您的类中定义消息:

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

    然后:

    throw new AmbiguousException();
    

    【讨论】:

    • 哈哈 .. 为一个错误消息编写一个类 .. 有趣。谢谢+1
    • @Shafizadeh 我认为您低估了例外情况。它们提供了完整的跟踪轨迹之类的东西,因此您实际上可以看到提供错误的方法调用链。它们不是简单的消息。
    【解决方案3】:

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

    throw new Exception();
    

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

    【讨论】:

    • 正如@zerkms 在他的回答中提到的,您也可以省略()。反正谢谢+1
    【解决方案4】:

    PHP manual中所述:

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

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

    throw new Exception();
    

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

    $e = new Exception('something is wrong');
    
    try {
        throw $e;
    } catch (Exception $ex) {
        echo $ex->getMessage();
    }
    

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

        • 是的,相信我,在问我的问题 ;-).. 之前,我已经检查了手册!谢谢你的回答。
        猜你喜欢
        • 2014-08-31
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-31
        • 2019-01-31
        • 2016-08-11
        相关资源
        最近更新 更多