Bug #11447 Updated: Switch statement sensible for white-space

From: Date: Tue, 19 Jun 2001 16:29:48 +0000
Subject: Bug #11447 Updated: Switch statement sensible for white-space
Groups: php.dev 
Request: Send a blank email to php-dev+get-57277@lists.php.net to get a copy of this message
ID: 11447 Updated by: vlad Reported By: per.persson@gnosjo.pp.se Old-Status: Bogus Status: Open Bug Type: Scripting Engine problem Operating system: PHP Version: 4.0.4pl1 Assigned To: Comments: The bug is valid - if you close and reopen the PHP tags between the switch and the case statement, it is going to bark at you. It shouldn't. This does not work: <? switch($var){ ?> <? case "alpha": break; }?> This does: <? switch($var){ case "alpha": break; }?> Why in the world would anyone do that, is a whole other issue, still they probably expect to be able to do just that. If they can't, we either need to document it as such, (thus re-classify this as documentation problem) or fix it. I do not know what it takes to fix that, but it is a valid report nevertheless. Unbogusifying... Previous Comments: --------------------------------------------------------------------------- [2001-06-13 14:58:29] per.persson@gnosjo.pp.se Which style I use, the "classical" style (using {}) or the "alternative" style (using : and endswitch), doesn't matter; the problem is the same. Sniper's comment about using <? ?> several times is surely justified when having one-line code as in his example, but when it comes to multi-line code, there is an issue of readability. I think that script A below is easier to read than script B. Don't you? --- begin script A --- <? switch($var): ?> <? case "alpha": ?> <p>Alpha</p> <? break; ?> <? case "beta": ?> <p>Beta</p> <? break; ?> <? default: ?> <p>Default</p> <? break; ?> <? endswitch; ?> --- end script A --- --- begin script B --- <? switch($var): case "alpha": ?> <p>Alpha</p> <? break; case "beta": ?> <p>Beta</p> <? break; default: ?> <p>Default</p> <? break; endswitch; ?> --- end script B --- --------------------------------------------------------------------------- [2001-06-13 10:18:56] sniper@php.net Use the {} instead of the : / endswitch; ie. <?php switch ($value) { case: ?> <p>Alpha</p> <?php break; } ?> And anyway, using <? ?> too much is really not good idea. This is just stupid: <? some code ?><? more code?><? code..?> --------------------------------------------------------------------------- [2001-06-12 19:13:44] per.persson@gnosjo.pp.se Section 7.4 in the FAQ is a little bit related. Should perhaps the ending for a block of PHP-code be "?>" followed by any number of white-space characters? --------------------------------------------------------------------------- [2001-06-12 18:51:27] per.persson@gnosjo.pp.se The following script gave a parse error: <? switch($var): ?> <? case "alpha": ?> <p>Alpha</p> <? break; ?> <!-- ... --> <? endswitch; ?> Parse error: parse error, expecting T_CASE' or T_DEFAULT' or `'}'' in <my-path>/bug.php on line 2 First I thought that this was really a bug, but then, while typing this report I realized that non-PHP-mode characters (like the two spaces) probably are converted to an "echo" instruction, so the PHP-parser sees something like the following code: switch($var): echo ' '; case "alpha": echo '<p>Alpha</p>'; break; endswitch; The parser doesn't expect anything (but PHP-mode white-space) to come between the ':' on line 1 and 'case' on line 3 and therefore reports parse error. Right? For the sake of "pretty-scripting", I would like this to change, but at the same time, now that I understand why the parser complains, I'm not sure if it should be changed... --------------------------------------------------------------------------- ATTENTION! Do NOT reply to this email! To reply, use the web interface found at http://bugs.php.net/?id=11447&edit=2

« previous php.dev (#57277) next »