PHPLINT
Friday, 12 January 07
Phplint is a simple Tcl program that checks PHP programs trying to find
accesses to not initialized varibles. This errors are frequent in PHP
due to typos. For example consider the following code:
$fooBar = 10;
echo($fooBaar);
^
|___ error!
The wrong variable $fooBaar will only be found by the programmer when
the program is executed and the exact line where the typo is preset
is reached (assuming E_NOTICE error level is set).
Thanks to automatic tests this kind of errors should be avoided from the
start, but the real world is not perfect so a tool trying to spot this
errors can be useful.
Please Keep in mind that phplint is very limited and is not a real PHP
parser, but just a number of regexp with some logic inside.
This program was written at my company in some hour for the real world
usage for a program we wanted to check after two weeks of
refactoring, and it was able to found many bugs, so even if limited we
hope it'll be useful for you too.
USAGE
Just try:
tclsh phplint.tcl /my/php/program/dir/*.php
EXAMPLE
./phplint.tcl simpletest.php
* In simpletest.php line 5: access to uninitialized var 'kk'
* In simpletest.php line 6: access to uninitialized var 'newwar'
simpletest.php is the following program:
1 <?
2 function foo($a,$b) {
3 $myArray = Array("foo" => 1, "bar" => 2);
4 foreach($myArray as $v => $k) {
5 $newvar = $v.$kk;
6 echo($newwar);
7 }
8 }
9 ?>
CODE ANNOTATIONS
In order to avoid that avoid that phplint false positives are reported it is
possible to annotate the source code with the following annotations:
$x = 10; # nolint
Phplint will not analyze this above line.
function foobar() {
.. analyzed code ..
# lintoff
.. not analyzed code ..
# linton
.. analyzed code ..
}
The above example allows to skip a number of lines at once
NEWS
Pavel Hloušek contributed a much improved version of PHPLint! 0.2, this is the changelog:
- exceptions, e.g. catch ( Exception $e )
- text after function-closing }, e.g. } // some comment
- types in argument list, e.g. function foo(MyBarClass $c)
- default array value in argument list, e.g. function foo($a=array(), $b="bar")
- superglobals, PHPLint ignores $GLOBALS, $_POST, $_GET, $_SESSION, $_SERVER, $_FILES superglobal variables now
- one-line comments that start with //
- array key checks, e.g. in $a[$b] = $c unassigned $b was not discovered in 0.1 version
DOWNLOAD
phplint is free software under the GPL2 license
FEEDBACKS
Email: antirez at gmail dot com
home