Проверка синтаксиса PHP до контроля исходного кода

Ссылаясь на Есть ли статический анализатор кода [например, Lint] для файлов PHP? - Я ищу, как оценить содержание PHP файлы до того, как они будут зафиксированы разработчиками. Любое подходящее решение будет запускаться через перехватчики SVN, аналогичные ответу: Можно ли проверить синтаксис файла PHP из PHP?

Я наткнулся на это Автоматическая проверка синтаксиса PHP файлы при проверке в SVN , что я и ищу, однако ... php -l недостаточно.

Например, с учетом кода:

if ($foo == 'bar') { 
     echo $foo;
}

Это приводит к:

2012/01/15 02:51:14 [ошибка] 694 # 0: * 164 FastCGI отправлено в stderr: "Уведомление PHP: неопределенная переменная : foo

По сравнению с:

if (isset($foo)) { echo $foo; }

Отчасти это сводится к обучению кодеров передовым методам. К сожалению, некоторые не учатся так быстро, как другие, и единственный способ обеспечить соблюдение стандартов кодирования - это чтобы уменьшить количество непроверенных или несовместимых с SVN данных.

Из первой ссылки в этом вопросе я попробовал:

  if ( $ foo == 'bar') {
 \_ ЗДЕСЬ

==== / mnt / hgfs / workspace / блокнот / phpinfo.php: 44: Предупреждение: сравнение (unknown) == (string): невозможно проверить сравнение между неизвестными типами

  • phpcs - Анализатор кода PHP
    • не сообщает о проблеме с $ foo несмотря на то, что PHP Sanity Check указывает на то, что это правильный ответ
  • SimpleTest
    • Это очень хорошо, но требует от разработчиков, которые пишут плохой код, написать хорошие модульные тесты .. .

Все по-своему интересны, но никто не улавливает эти проблемы, которые на самом деле обнаруживаются только во время выполнения.

Оцените вклад / мысли по этой теме.

РЕДАКТИРОВАТЬ

Был один автор, который предположил, что PHPLint - правильный путь. Я подумал, окей! Давайте попробуем еще раз, учитывая, что есть новая версия: phplint-pure-c-1.1_20120202 :

 

Простой тест .................. .. и, он работает и сообщает 1 ошибку, 1 предупреждение. Однако, если следующее добавлено ПЕРЕД оператором if :

 

он не работает и сообщает 0 ошибок, 2 предупреждения.

34
задан Community 23 May 2017 в 12:34
поделиться