Ссылаясь на Есть ли статический анализатор кода [например, Lint] для файлов PHP? - Я рассматриваю, как оценивать содержимое файлов PHP до их совершенных разработчиками. Независимо от того, какое решение уместно, будет запущено через крючки SVN, похожие на ответ: Можно ли проверить PHP-синтаксис PHP с помощью PHP?
Я столкнулся с этим Автоматическая проверка синтаксиса файлов PHP при проверке SVN, который является тем углом, который я собираюсь, однако... php -l
недостаточно.
Например, с учетом кода:
if ($foo == 'bar') {
echo $foo;
}
Это приводит к:
2012/01/15 02:51:14 [error] 694 # 0: * 164 FastCGI отправлено в stderr: "Замечание PHP: Undefined: 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: Предупреждение: сравнение (неизвестно) == (строка): невозможно проверить сравнение между неизвестными типами
- phpcs - PHP Code Sniffer
- не сообщает о проблеме с
$foo
, несмотря на Проверка работоспособности PHP, указав, что это правильный ответ.
- не сообщает о проблеме с
- 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 предупреждения.