Re: "php -l" - does it find *anything*?
| From: | Peter Lind | Date: | Tue, 06 Jul 2010 09:47:06 +0000 |
| Subject: | Re: "php -l" - does it find *anything*? | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-306705@lists.php.net to get a copy of this message | ||
On 6 July 2010 11:30, Ashley Sheridan <ash@ashleysheridan.co.uk> wrote:
> On Tue, 2010-07-06 at 10:54 +0200, Gary . wrote:
>
>> 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.
>>
>
>
> According to the man page for php, the -l flag only checks the syntax,
> so a warning wouldn't be displayed, as technically it's not a
> show-stopper. Maybe some sort of unit testing would help pick out these
> sorts of issues? As PHP isn't a compiled language, I guess it's harder
> for it to pick up on things like this. You don't need to declare a
> variable before using it in PHP like you do in a compiled language
> (without getting into the murky territory of compiled PHP!) so some
> things might only be picked up by unit testing.
>
Yeah, unit testing is definitely the way to go, +1 on that idea.
Regards
Peter
--
<hype>
WWW: http://plphp.dk / http://plind.dk
LinkedIn: http://www.linkedin.com/in/plind
BeWelcome/Couchsurfing: Fake51
Twitter: http://twitter.com/kafe15
</hype>