参考是否有像Lint那样的PHP文件静态代码分析器?--我正在寻找如何在开发人员提交代码之前评估PHP文件的内容。无论哪种解决方案都将通过类似于答案的SVN钩子触发:是否可能从PHP检查PHP文件语法?
我找到了这个将PHP文件自动语法检查到SVN中的方法,这正是我要追求的方向,但是...php -l
并不足够。
例如,给定以下代码:
if ($foo == 'bar') {
echo $foo;
}
这导致:
2012/01/15 02:51:14 [error] 694#0: *164 FastCGI在stderr中发送的内容为:"PHP Notice: Undefined variable: foo
与之相比:
if (isset($foo)) { echo $foo; }
一些问题需要通过教育程序员的最佳实践来解决。不幸的是,有些人学习速度没有其他人快,确保遵守编码标准的唯一方式是减少未经测试或不符合标准的内容输入到SVN中。
从这个问题的第一个链接中,我尝试过:
- php -l
- 没有通知
$foo
的问题
- 没有通知
- phplint-pure-c-1.0_20110223 - PHPLint
- 没有通知
$foo
的问题
- 没有通知
if ($foo == 'bar') { \_ HERE
==== /mnt/hgfs/workspace/scratch-pad/phpinfo.php:44: 警告: comparing (unknown) == (string): 无法检查未知类型之间的比较
- phpcs - PHP Code Sniffer
- 尽管PHP Sanity Check表明
$foo
是正确的答案,但没有提示关于$foo
的问题- SimpleTest
- 非常好用,但需要编写良好的单元测试来发现代码错误的开发人员...
它们各有所长,但都没有捕获这些只在运行时才会出现的问题。
欢迎就此主题提供意见和想法。
编辑
有一位发布者建议使用PHPLint,我想,好吧!考虑到有一个新版本:phplint-pure-c-1.1_20120202:
<?php if ($foo == 'bar') { echo $foo; } ?>
简单测试....................,它有效,并且报告了1个错误和1个警告。但是,如果在
if
语句之前添加以下内容:
<?php if (isset($foo) && $foo == 'bar') { echo 'man'; } if ($foo == 'bar') { echo $foo; } ?>
它不起作用,并且报告0个错误,2个警告。