"php -l" - does it find *anything*?
| From: | Gary . | Date: | Tue, 06 Jul 2010 08:54:43 +0000 |
| Subject: | "php -l" - does it find *anything*? | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-306701@lists.php.net to get a copy of this message | ||
Or, alternatively put, is there any way to find the kind of problems in
foo2 & foo3 (below), at "*compile* time"?
,----[ lint-test.php ]
| <?php
|
| error_reporting(E_ALL | E_STRICT);
|
| function foo1()
| {
| $bar = 'cheese';
| echo $bar;
| }
|
| function foo2()
| {
| $bar = 'cheese';
| echo 'cheese';
| }
|
| function foo3()
| {
| // $bar = 'cheese';
| echo $bar;
| }
|
| foo1();
| foo2();
| foo3();
|
| ?>
`----
I only get errors displayed when code happens to pass down the code
path, i.e. at runtime:
,----
| /home/jg/work $ php -l lint-test.php
| No syntax errors detected in lint-test.php
| /home/jg/work $ php lint-test.php
| cheesecheese
| Notice: Undefined variable: bar in
| /home/jg/work/lint-test.php on line 20
|
| Call Stack:
| 1.0000 61488 1. {main}()
| /home/jg/work/lint-test.php:0
| 1.0000 61680 2. foo3()
| /home/jg/work/lint-test.php:25
`----
If foo3 never happens to be called when I am doing my testing (for
example if the call is in some "if" branch that is never exercised) then
it only gets found in production, so I would like to find this kind of
thing using a static analyser. The kind of problem in foo2 I could live
with, but would like to find as well, if possible. (Obviously I am using
these two example problems as indicative of the type of things I want to
find, it isn't an exhaustive list!)
BTW, what problems *does* "php -l" pick up? I can't find a description
anywhere.