Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 文档错误标签_Php_Documentation_Phpdoc - Fatal编程技术网

Php 文档错误标签

Php 文档错误标签,php,documentation,phpdoc,Php,Documentation,Phpdoc,我在类中有一个触发错误的方法 /** * Get info * @return string|FALSE Info */ public function getInfo() { if ($this->info) { return $this->info; } trigger_error('Missing info', E_USER_WARNING); return FALSE; } 我不想在这里抛出异常,因为我确实希望/需要此

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

/**
 * 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
 */

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

没有phpdoc错误标记

返回bool,因此您的方法不会返回或抛出任何内容。除非您的错误处理程序阻止执行,否则执行将继续,因此使用@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
}

我同意其他人的看法,我会在这里改变我的编码方法,但解决您的直接问题——我可能会使用@internal标记来解释您希望开发人员注意的事情。当然,当您针对此代码运行phpDocumentor时,@内部标记不会出现在生成的文档中,除非您使用--parse private runtime选项。。。这是因为DEVS的内部信息被认为是对消费者/ API感兴趣的读者的限制,就像“@访问私有”项目一样。

有点离题:许多程序员甚至认为用户警告是错误的。与例外情况相反,通知无法[本地]捕获。所以记录一个错误似乎很奇怪。我知道你是从哪里来的。通常我会使用这种方法。但在本例中,我将信息输出到视图之类的东西。如果我抛出异常,用户将看到一个错误页面。为信息返回FALSE更好,因为用户仍然可以获得可用的信息。但是我想知道(并修复)信息是否未设置。这就是
hasInfo()
方法的作用(在第二个代码块中)。如果未设置该信息,则无论从何处调用,都可以在视图、控制器或视图帮助器中处理该信息。谢谢。这最能回答我原来的问题。但我也采纳了建议,并且重新设计了代码,所以根本不会触发错误。