Re: "php -l" - does it find *anything*?

From: 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>

« previous php.general (#306705) next »