Обращаясь к Существует ли статический анализатор кода [например, 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: Неопределенная переменная: foo
По сравнению с:
if (isset($foo)) { echo $foo; }
Часть этого сводится к обучению программистов передовым методам.К сожалению, некоторые не учатся так же быстро, как другие, и единственный способ обеспечить соответствие стандартам кодирования - это уменьшить количество непроверенных или несовместимых в SVN.
По первой ссылке в этом вопросе я попытался:
if ($foo == 'bar') {
\_ HERE
==== /mnt/hgfs/workspace/scratch-pad/phpinfo.php:44: Предупреждение: сравнение (неизвестно) == (строка): невозможно проверить сравнение между неизвестными типами
Все они по-своему интересны, но никто не уловил этих проблем, которые действительно обнаруживаются только во время выполнения.
Цените вклад / мысли по этой теме.
РЕДАКТИРОВАТЬ
Был один постер, который предположил, что PHPLint - правильный путь.Я думал, хорошо!Давайте попробуем еще раз, учитывая, что есть новая версия: phplint-pure-c-1.1_20120202 :
<?php
if ($foo == 'bar') {
echo $foo;
}
?>
Простой тест .................... и, работает и выдает 1 ошибку, 1 предупреждение.Однако, если добавлено следующее BEFORE оператор if
:
<?php
if (isset($foo) && $foo == 'bar') { echo 'man'; }
if ($foo == 'bar') {
echo $foo;
}
?>
, он не работает и выдает 0 ошибок, 2 предупреждения.