【问题标题】:Exception annotations for propagated exceptions传播异常的异常注释
【发布时间】:2015-12-25 20:18:23
【问题描述】:

假设我有一个函数a 会引发异常$e。因此,根据phpdoc,我应该在a 的定义上添加注释@throws

当我有另一个函数b调用a

function b() {
   a();
}

b 的定义上添加@throw 注释表示b 可能会引发这种异常,这是好的做法/坏做法/正确/错误吗?

【问题讨论】:

  • PHPDoc 基于 JavaDoc,我很确定在 Java 中您会在此处的 b() 方法中包含 @throws 声明。但我认为更重要的问题是您是否认为知道 b() 可能会引发特定类型的异常对您和其他程序员实际上有用,特别是如果您可能想用 try/catch 块捕获它调用 b() 时。

标签: php exception phpdoc


【解决方案1】:

@throws注解是为了给开发者指明function()是否可以抛出异常
首先,你要问一个问题:为什么不捕获@中的异常987654322@ 方法,有什么正当理由吗?
是吗? 所以你必须添加@throws 注解,它会表明你,或者其他开发者使用function() b() IS不安全,他们将决定是否会 捕获或传播异常
,由于PHP不会强制你捕获另一个函数抛出的异常,@throws 注释变成了一个必须/强制练习

【讨论】:

  • 因为异常“不安全”而盲目捕获异常是对异常的不良态度。异常的优点是您可以为成功案例提供干净的代码路径,并让它们向上传播是其中的重要部分。您没有明确否认这一点,但您的回答表明了对他们的这种(恕我直言有缺陷的)态度。
【解决方案2】:

事实上,b() 会抛出异常。无论是直接发生还是间接发生,都与调用者无关。现在,注释不应该记录内部实现细节,这些细节可能会随着不同的派生类而改变甚至变化。相反,注释记录了调用者可见的行为,因此有效的异常也应该是注释的一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 2012-10-22
    • 2016-06-24
    • 2014-01-03
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多