On 6 July 2010 11:30, Ashley Sheridan <ash@xxxxxxxxxxxxxxxxxxxx> 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> -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php