參考Is there a static code analyzer [like Lint] for PHP files? - 我正在研究如何評估開發人員提交PHP文件之前的內容。無論溶液(S)是合適的將通過SVN觸發類似的鉤的答案:Is it possible to check PHP file syntax from PHP?PHP語法檢查源代碼前控制
我碰到這個Automatic Syntax checking of PHP files when checking into SVN這是我要的,角度然而... php -l
是不是就足夠了。
例如,假設代碼:
if ($foo == 'bar') {
echo $foo;
}
這導致:
2012/01/15 02:51:14 [error] 694#0: *164 FastCGI sent in stderr: "PHP Notice: Undefined variable: foo
相比:
if (isset($foo)) { echo $foo; }
一些這歸結爲最佳實踐教育打碼機。不幸的是,有些人不像其他人那樣快速學習,並且唯一能夠確保符合編碼標準的方法是減少未經測試或不合規的SVN。
在這個問題上的第一個鏈接,我曾嘗試:
- PHP -l
- 不
$foo
- 不
- phplint-pure-c-1.0_20110223 - PHPLint
-
通知有關問題
- 未通知有關的問題
if ($foo == 'bar') { \_ HERE
==== /mnt/hgfs/workspace/scratch-pad/phpinfo.php:44: Warning: comparing (unknown) == (string): cannot check the comparison between unknown types
- phpcs - PHP Code Sniffer
- 不會通知用戶與
$foo
問題,儘管PHP Sanity Check表明它是正確的答案
- 不會通知用戶與
- 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個警告。
老實說,讓他們寫單元測試。語法檢查不會找到大多數故障。單元測試會。 – NikiC 2012-02-10 07:45:16
在svn pre-commit鉤子中做這樣的事情時要非常小心。事實上,我會說扁平化不這樣做。除非提交被拒絕,否則你不能看到svn pre-commit hook的輸出 - 當你基於非嚴重錯誤阻止提交時,這可能會造成令人難以置信的破壞性。除非您重視高於生產力的一致性,否則最好在開發人員的機器上實施此類檢查。考慮到你使用svn,綁定到你的構建系統會更合適。 – AD7six 2012-02-10 16:52:11
總會有一些情況不能按照你想要的方式工作。這並沒有改變phplint做你最初的要求。請注意,我其實並沒有說你應該使用它 - 我只是暗示它符合你提出的要求。 – eis 2012-02-16 12:58:14