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