考虑这个PHP脚本:
<?php // 1
// 2
function foo() { // 3
// 4
$foo = 1; // 5
// 6
if("something") { // 7
$bar = 2; // 8
// 9 = note the missing brace
// 10
$baz = 4; // 11
// 12
} // 13
?> // 14
当你运行它时,你将得到解析错误
Parse error: syntax error, unexpected end of file in ... on line 14
是否有一个用于php的工具,它足够智能分析我的缩进并告诉我实际问题是在第9行(或11,就此而言),而不是在脚本的末尾。
答案 0 :(得分:2)
这种问题几乎无法解决。编译器会尽力告诉您发生错误的位置,但它无法正确执行。从本质上讲,它将继续扫描文件,直到它到达那个必须无效的东西;但这并不意味着你搞砸了。它只是意味着在你犯了错误的那一刻,接下来的东西仍然是技术上有效的语法(即使完全是愚蠢的),直到编译器厌恶地放弃。
所以在你的情况下,语法在第14行之前在技术上很好,即使代码偏离你在第9行的意图。解析器也不知道。
由于缩进是可选的并且被解析器忽略,因此它几乎肯定会比考虑缩进的麻烦更多。如果确实如此,那么在没有错误的情况下会不断出现错误。毕竟,缩进在语法上没有意义的一个后果就是有不止一种合理的缩进方式。
我认为,您最好的选择是使用自动为您添加缩进的IDE。 (Eclipse当然可以配置为你缩进缩进。)如果你这样做,你会发现,当你写第11行它想要缩进它比你期望的更多,这会给你一个线索,你忘记了一个闭合支撑。
答案 1 :(得分:1)
从技术上讲,这可能是可能的,而不是很难实现作为某些IDE的插件(Netbeans,PHP Storm,Eclipse,...) 但我不知道任何提供当前功能的插件或IDE。也许你可以自己实现它。
简单的实现就像是
{
{
{
}
}
=&gt;发出警告此程序应称为递归
答案 2 :(得分:0)
我知道这在技术上没有回答这个问题,但我发现netbeans 中的语法突出显示有助于无法解决这个问题。
我现在不能没有它。
答案 3 :(得分:0)
PHP_CodeSniffer在这里略有帮助。这是它为相关脚本打印的内容:
--------------------------------------------------------------------------------
FOUND 4 ERROR(S) AFFECTING 4 LINE(S)
--------------------------------------------------------------------------------
2 | ERROR | Missing file doc comment
3 | ERROR | Missing function doc comment
8 | ERROR | Line indented incorrectly; expected 0 spaces, found 4
22 | ERROR | Closing brace indented incorrectly; expected 4 spaces, found 0
--------------------------------------------------------------------------------
第三条消息令人困惑,仍然比默认消息更接近问题的根源。