Refiriéndose a Is there a static code analyzer [like Lint] for PHP files? - Estoy buscando cómo evaluar el contenido de los archivos PHP antes de que sean comprometidos por los desarrolladores. Cualquiera que sea la (s) son apropiadas se activará a través de SVN ganchos similar a la respuesta: Is it possible to check PHP file syntax from PHP?Comprobación de la sintaxis PHP pre-source control
me encontré con este Automatic Syntax checking of PHP files when checking into SVN que es el ángulo que voy a, sin embargo ... php -l
no es más que suficiente.
Por ejemplo, teniendo en cuenta el código:
if ($foo == 'bar') {
echo $foo;
}
Esto se traduce en:
2012/01/15 02:51:14 [error] 694#0: *164 FastCGI sent in stderr: "PHP Notice: Undefined variable: foo
En comparación con:
if (isset($foo)) { echo $foo; }
Algo de esto se reduce a la educación de los codificadores en las mejores prácticas . Desafortunadamente, algunos no aprenden tan rápido como otros, y la única manera de garantizar el cumplimiento de los estándares de codificación es reducir lo que entra en SVN que no se ha probado o no es compatible.
Desde el primer eslabón de esta pregunta, me han tratado:
- php -l
- no notifica sobre el problema con
$foo
- no notifica sobre el problema con
- phplint-pure-c-1.0_20110223 - PHPLint
- no notifica sobre el problema con
$foo
- no notifica sobre el problema con
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
- no notifica sobre el problema con
$foo
pesar PHP Sanity Check indicando que era la respuesta correcta
- no notifica sobre el problema con
- SimpleTest
- es muy agradable, pero requiere que los desarrolladores que escriben el código malo para escribir buenas pruebas unitarias ...
Todos son interesantes en su propio camino, pero ninguno se están poniendo estos problemas que realmente solo se encuentran en tiempo de ejecución.
Apreciar las opiniones/pensamientos sobre este tema.
EDITAR
Había un cartel que sugirió que PHPLint era el camino correcto a seguir.Pensé, OK! Vamos a intentarlo de nuevo teniendo en cuenta que hay una versión nueva: phplint-pure-c-1.1_20120202:
<?php
if ($foo == 'bar') {
echo $foo;
}
?>
Prueba simple y ...................., funciona y informa 1 error, 1 advertencia. Sin embargo, si se añade el siguiente ANTES la declaración if
:
<?php
if (isset($foo) && $foo == 'bar') { echo 'man'; }
if ($foo == 'bar') {
echo $foo;
}
?>
no funciona, y los informes de errores, 2 0 advertencias.
Honestamente, permítales escribir pruebas unitarias. La comprobación de sintaxis no encontrará la mayoría de las fallas. La prueba unitaria lo hará. – NikiC
Tenga mucho cuidado al hacer este tipo de cosas en un enlace svn pre-commit. De hecho, diría rotundamente que no lo hagas. No se puede ver el resultado de un enlace de precompilación de svn a menos que se rechace el compromiso; eso puede ser increíblemente perturbador cuando se bloquean las confirmaciones basadas en errores no críticos. Es mejor implementar dichos controles en las máquinas del desarrollador a menos que valore la conformidad por encima de la productividad. Aterrizar en su sistema de compilación sería más apropiado dado que usa svn. – AD7six
siempre habrá algunos casos en los que algo no funciona de la manera que te gustaría. Eso no cambia el hecho de que phplint hizo lo que originalmente le pediste. Eso sí, en realidad no dije que debieras usarlo; solo insinué que encajaba con los requisitos que planteabas. – eis