【问题标题】:Documentation errors tag [closed]文档错误标签[关闭]
【发布时间】:2012-03-19 15:11:05
【问题描述】:

我在触发错误的类中有一个方法。

/**
 * Get info
 * @return string|FALSE Info
 */
public function getInfo()
{
    if ($this->info) {
        return $this->info;
    }

    trigger_error('Missing info', E_USER_WARNING);
    return FALSE;
}

我不想在这里抛出异常,因为我真的希望/需要这段代码继续运行。在其他地方,我记录了这个错误,记录错误超出了这个类的范围。

但是我该如何记录呢?对于一个例外,我会使用:

/**
 * @throws Exception
 */

错误有类似的东西吗?我真的希望其他开发人员能够轻松了解我的代码中发生了什么。

【问题讨论】:

  • 有点离题:许多程序员甚至将用户警告视为错误。与例外情况相反,无法[本地]捕获通知。所以...记录错误似乎很奇怪。

标签: php documentation phpdoc


【解决方案1】:

没有用于错误的 phpdoc 标记。

trigger_error() 返回布尔值,因此您的方法不会返回或抛出任何东西。除非您的错误处理程序阻止,否则执行将继续执行,因此使用 @return 或 @throws 会误用它们,并且可能会使阅读您代码的任何人感到困惑。


我会使用不同的方法。

我会这样做:

/**
 * Has info
 *
 * @return bool Whether info is available
 */
public function hasInfo()
{
    return (bool) $this->info; // or use isset() or whatever you need
}

/**
 * Get info
 *
 * @throws Exception
 * @return string The info string
 */
public function getInfo()
{
    if (! $this->hasInfo()) {
        throw new Exception('Missing info');
    }

    return $this->info;
}

然后从您的其他代码中,您可以:

if ($object->hasInfo()) {
    $info = $object->getInfo();
} else {
    // no info!
}

我还会在我的代码库的根目录中捕获异常:

try {
    MyApp::run();
}
catch(Exception $e) {
    // handle error, eg. display fatal error message
}

【讨论】:

  • 我知道你来自哪里。通常我会使用这种方法。但在这种情况下,我将信息输出到视图之类的东西。如果我抛出异常,用户将看到一个错误页面。为信息返回 FALSE 更好,因为用户仍将获得可用信息。但我想知道(并修复)信息是否未设置。
  • 这就是hasInfo() 方法的用途(在第二个代码块中)。如果未设置信息,您可以从任何位置处理它,无论是视图、控制器还是视图助手。
【解决方案2】:

我同意其他人的观点,即我会在这里改变我的编码方法,但要解决你的直接问题——我可能会使用@internal 标签来解释你希望开发人员注意的事情的。当然,当您针对此代码运行 phpDocumentor 时,@internal 标记不会出现在您生成的文档中,除非您使用 --parse-private 运行时选项...这是因为 internal-info-for-devs 被假定为关闭限制消费者/对 API 感兴趣的读者,就像“@access private”项目一样。

【讨论】:

  • 谢谢。这最好地回答了我最初的问题。但我也接受了建议并重新设计了代码,因此根本不会触发错误。
猜你喜欢
  • 2018-03-30
  • 2018-07-06
  • 2023-04-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 2022-08-08
相关资源
最近更新 更多