PHP Sintaxe verificando o controle pré-fonte
Referindo paraxiste um analisador de código estático [como o Lint] para arquivos PH -stou vendo como avaliar o conteúdo dos arquivos PHP antes que eles sejam confirmados pelos desenvolvedore As soluções apropriadas serão acionadas por meio de ganchos SVN semelhantes à resposta: possível verificar a sintaxe do arquivo PHP a partir do PH
Me deparei com isso Verificação automática de sintaxe de arquivos PHP ao verificar no SVN qual é o ângulo que estou procurando, no entanto ...php -l
não é suficiente.
Por exemplo, dado o código:
if ($foo == 'bar') {
echo $foo;
}
Isto resulta em
2012/01/15 02:51:14 [erro] 694 # 0: * 164 FastCGI enviado no stderr: "Aviso do PHP: Variável indefinida: foo
Comparado com
if (isset($foo)) { echo $foo; }
Algo disso se resume à educação de codificadores sobre as melhores práticas. Infelizmente, alguns não aprendem tão rapidamente quanto outros, e a única maneira de garantir a conformidade com os padrões de codificação é reduzir o que está entrando no SVN que não foi testado ou não é compatíve
No primeiro link nesta pergunta, tentei:
php -l não notifica sobre o problema com$foo
phplint-pure-c-1.0_20110223 - PHPLint não notifica sobre o problema com$foo
if ($foo == 'bar') {
\_ HERE
==== /mnt/hgfs/workspace/scratch-pad/phpinfo.php:44: Aviso: comparando (desconhecido) == (string): não é possível verificar a comparação entre tipos desconhecidos
phpcs - Sniffer de código PHP não notifica sobre o problema com$foo
apesar dePHP Sanity Check indicando que foi a resposta certa SimpleTestÉ muito bom, mas exige que os desenvolvedores que estão escrevendo o código incorreto escrevamBo testes de unidade ...@All é interessante à sua maneira, mas nenhum está detectando esses problemas que realmente só são encontrados em tempo de execuçã
Aprecie sugestões / reflexões sobre este tópic
EDITA
Havia um pôster que sugeria que o PHPLint era o caminho certo a seguir. Eu pensei, ok! Vamos tentar novamente, uma vez que existe uma nova versão: phplint-pure-c-1.1_20120202:
<?php
if ($foo == 'bar') {
echo $foo;
}
?>
Simple test .................... e,funcion e relata 1 erro, 1 aviso. No entanto, se o seguinte for adicionadoANTE aif
declaração
<?php
if (isset($foo) && $foo == 'bar') { echo 'man'; }
if ($foo == 'bar') {
echo $foo;
}
?>
não funcion e relata 0 erros, 2 aviso