【问题标题】:Is there a tool to analyze PHP code to check whether returned value is used properly?有没有分析PHP代码的工具来检查返回值是否被正确使用?
【发布时间】:2025-12-04 10:35:01
【问题描述】:

假设我有以下代码:

$result = $thirdPartyAPI->doSomething(); // returns false if error
if ($result == false) {
    return $someErrorCode;
}

// process the valid $result

我在整个代码中都有很多对$thirdPartyAPI 的调用,所以我不想忘记检查$result 是否有效或是否发生错误。

我检查了PHP Code SnifferPHP Mess Detector 工具,但我发现它们的规则都不适合这种特殊情况。

我想知道是否有一种工具(例如静态代码分析工具)能够报告我是否忘记检查返回值是否具有特定值。

【问题讨论】:

  • 您使用的工具名为class。你说你有很多通过代码传播的电话。为什么不简单地将使用场景包装在一个可以为您处理成功和错误的类中呢?如果您可以使用我们可用的工具解决它,我认为这里不需要静态分析。..
  • 用于单元测试的 PHPUnit 会有所帮助,因为您可以验证代码返回是否正在检查/对返回值执行某些操作。
  • 感谢您的想法@Mjh。我理解你。包装功能的class 可以为我节省大量类似的代码。但是,我仍然会遇到同样的问题:如果发生错误,该类将返回一个有效值或false。我应该检查两者。我也会遇到同样的情况。它可能会抛出异常,但是当您可以检查特定值时,我不喜欢抛出它们(这不是 exceptional 用例)
  • 单元测试是一个非常好的主意@StevenScott,我认为它们是一种可能性。但是,$thirdPartyAPI 访问数据库,所以这些测试不会很快。此外,如果我不为该代码编写测试,它不会告诉我是否忘记检查返回值。我有两件事要记住。但我同意你的看法,检查我的代码的正确性可能是一个很好的可能性。谢谢!
  • @rchavarria 实际上,您可以模拟数据库代码以使其保持快速。 PHPUnit 测试还可以输出代码覆盖率,因此您可以查看您是否测试了一个场景,并且它还包含一个骨架生成器来构建需要测试的大纲。自动化测试是长期和高质量代码的明确要求。

标签: php static-code-analysis phpmd phpcs


【解决方案1】:

自 2017 年以来有:PHPStan

我使用它,它就像一个魅力。 Here is simple intro to it

【讨论】:

  • 有趣。它似乎使用 type hints 来改进静态分析。检查方法是否返回所需类型的值会很有用。但这并不是我在这里寻找的。我正在寻找一些工具来警告我,如果我忘记检查返回值,而不是方法返回正确类型的值。无论如何,如果你能分享一些你认为可以帮助我的规则的链接,那就太棒了。
  • 哦,我现在明白了。您想要一个自定义检查,以确保您在“$thirdPartyAPI->...”之后有特殊代码,对吗?如果是这样,您可以为此编写一个嗅探。我可以帮你设置,只需写一封电子邮件:github.com/tomasvotruba
最近更新 更多