似乎有很多用于PHP的静态代码分析工具,你能不能建议一个可以检测PHP代码中抛出但却永远不会被捕获的异常的工具? (这些,理论上可以停止在PHP脚本上执行)。
我很高兴看到throw new SomeException()
之类的内容,其中SomeException
扩展Exception
。
我不是在寻找太复杂的东西 - 只是为了警告我,如果我从someFunctionThatCanThrow
运行throw
(因为里面有index.php
声明)(你明白了) ,我可以遇到麻烦。即使在运行时也永远不会发生。
感谢。
答案 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中,无法导致致命的异常,插件报告此内容。