【问题标题】:Finding @throws exceptions: What exceptions does PHPDoc expect from this method?查找@throws 异常:PHPDoc 期望此方法有哪些异常?
【发布时间】:2018-07-07 04:56:37
【问题描述】:

我有这个类方法,我的 IDE (PHPStorm) 通知我它缺少 @throws tags in the PHPDoc:

/**
 * Return Time Frame for request to API
 *
 * @since 2.4.7
 *
 * Default time_frame is two dates, start of current week, and four weeks from now.
 *
 * @return array or start and end dates as required for MBO API
 */
public function time_frame(){
    $start_time = new \Datetime( date_i18n('Y-m-d', current_time( 'timestamp' )) );
    $end_time = new \Datetime( date_i18n('Y-m-d', current_time( 'timestamp' )) );
    $di = new \DateInterval('P4W');
    $end_time->add($di);

    return array('StartDateTime'=> $start_time->format('Y-m-d'), 'EndDateTime'=> $end_time->format('Y-m-d'));
}

虽然我可能会将此函数抛出的exceptions 用于DatetimeDateIntervalDateTime::__construct()DateInterval::__construct()

添加

* @throws DateTime::__construct()
* @throws DateInterval::__construct()

不满足验证者。有什么建议么?

【问题讨论】:

  • 你用的是什么php版本?
  • 通常,throws 标签用于指示该方法将抛出什么异常,如果有的话。不是它使用的类会抛出什么
  • @Charis php7.1,或者可能是第 2 点。

标签: php datetime exception phpdoc


【解决方案1】:

尝试在文档中添加@throws \Exception。根据\DateTime 类构造函数和DateInterval 构造函数,如果某些参数未正确声明,每个类都可能抛出\Exception。 DateTime 的时区和 DateInterval 上的 interval_spec

参考:DatetTime::__construct reference

【讨论】:

  • 谢谢,查里斯。我想我在没有命名空间转义的情况下尝试了@throws Exception,甚至进入了您引用的页面。注意到如果它抛出一些东西这将是一个“异常”似乎很愚蠢,因为这是你唯一可以抛出的东西,不是吗?
  • 好吧。如果类型不匹配,一些 linter 不会接受它。我遇到的一些类型检查需要明确声明它抛出的确切异常类。像 runtimeexception 或 invalidargumentexception。
  • 可能会抛出不同类型的异常,而不仅仅是 \Exception 基类。 @Charis 的 \RuntimeException\InvalidArgumentException 示例是 \Exception 的子代。有时你想抛出一个特定的异常来更好地表示出了什么问题,而不仅仅是简单的\Exception。有时,作为调用者,您有处理某些异常的代码,但没有处理其他异常。您的方法调用了几个 Date 方法,这些方法已知会引发某些异常。由于 API 阅读器读取的是您的文档,而不是方法主体,因此 @throws 是您沟通的方式。
猜你喜欢
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 2023-04-08
相关资源
最近更新 更多