PHP静态代码分析工具,它可以检测未捕获的异常?

时间:2011-11-25 11:19:42

标签: php static-code-analysis

似乎有很多用于PHP的静态代码分析工具,你能不能建议一个可以检测PHP代码中抛出但却永远不会被捕获的异常的工具? (这些,理论上可以停止在PHP脚本上执行)。

我很高兴看到throw new SomeException()之类的内容,其中SomeException扩展Exception

我不是在寻找太复杂的东西 - 只是为了警告我,如果我从someFunctionThatCanThrow运行throw(因为里面有index.php声明)(你明白了) ,我可以遇到麻烦。即使在运行时也永远不会发生。

感谢。

2 个答案:

答案 0 :(得分:3)

PHPLint似乎就是答案。例如,它解析

<?php

function some()
{
    if (time() == 123) {
        throw new Exception("I can't happen");
    }
}

some();

,它永远不会抛出异常(除非你过去),进入:

BEGIN parsing of test-cSdHoW
1:      <?php
2:      
3:      function some()
4:      {
5:       if (time() == 123) {
6:        throw new Exception("I can't happen");

          throw new Exception("I can't happen");
                                                \_ HERE
==== 6: notice: here generating exception(s) Exception

          throw new Exception("I can't happen");
                                                \_ HERE
==== 6: ERROR: exception(s) must be caught or declared to be thrown: Exception
7:       }
8:      }
9:      
10:     some();
==== 3: notice: guessed signature of the function `some()' as void()

        some();
             \_ HERE
==== 10: notice: here generating exception(s) Exception

        some();
             \_ HERE
==== 10: Warning: uncaught exception(s): Exception
END parsing of test-cSdHoW
==== ?: notice: unused package `dummy.php'
==== ?: notice: required module `standard'
Overall test results: 1 errors, 1 warnings.

这正是我所要求的:)添加文件块并捕获异常会导致PHPLint不再出现错误或警告。

答案 1 :(得分:2)

至于2015年,PhpStorm存在一个可用作插件Php Inspections (EA Extended)的SCA工具 - 它进行这种分析,包括嵌套调用。此外,它需要考虑上下文,例如在__toString中,无法导致致命的异常,插件报告此内容。