ID: 13610 Updated by: torben Old Summary: heredoc: any chars (even white space) after closing ";" causes error Reported By: [EMAIL PROTECTED] Status: Open Bug Type: Feature/Change Request Operating System: Windows98 PHP Version: 4.0.6 New Comment:
Yeesh. Scratch that. :) The issue remains but the patch I just posted here indicates a seious need for supper. Torben Previous Comments: ------------------------------------------------------------------------ [2002-01-28 21:56:41] [EMAIL PROTECTED] Here's a quick patch which just allows text *after* the semicolon, and doesn't appear to affect anything else, so BC shouldn't be a problem. [EMAIL PROTECTED] told me before that this is 'intentional', but no-one has yet explained why... Note that this patch may not be the best solution, but it does illustrate what I'm after. Torben Index: zend_language_scanner.l =================================================================== RCS file: /repository/Zend/zend_language_scanner.l,v retrieving revision 1.43 diff -u -r1.43 zend_language_scanner.l --- zend_language_scanner.l 2002/01/06 15:21:09 1.43 +++ zend_language_scanner.l 2002/01/29 02:54:16 @@ -1256,7 +1256,7 @@ } -<ST_HEREDOC>^{LABEL}(";")?{NEWLINE} { +<ST_HEREDOC>^{LABEL}(";")? { int label_len; unsigned char unput_semicolon; ------------------------------------------------------------------------ [2001-10-09 17:59:30] [EMAIL PROTECTED] Patch available here: http://www.A-Eskwadraat.nl/~jeroen/php/looser_heredoc.diff which changes behaviour to: A heredoc is considered closed when the heredoc identifier appears directly after a newline. Remaining characters are allowed, provided they are invalid identifyer characters. Example: <?php mail('[EMAIL PROTECTED]', 'heredoc test', <<<TEXT Hello Jeroen, Greets! TEXT, 'Cc: [EMAIL PROTECTED]'); ?> And this works: <?php echo <<<HEREDOC bla HEREDOCUMENTATION; HEREDOC; // here the heredoc ends ?> But this doesn't: <?php echo <<<HEREDOC bla HEREDOC UMENTATION; HEREDOC; ?> for the same reason as this is: echo "bla" UMENTATION; causes a parse error. ------------------------------------------------------------------------ [2001-10-09 16:27:02] [EMAIL PROTECTED] This behaviour is documented in the strings section, subsection heredoc. I agree that this is quite annoying and strange. It can be easily modified, for example to allow anything afterwards. But this could break BC (though not likely): $bla = <<<HEREDOC Text text HEREDOC is great! text HEREDOC; Other solutions would be quite arbirary (as is the current solution by the way). Most consistent would be allowing a heredoc-string at all places where a quoted string is also allowed. ------------------------------------------------------------------------ [2001-10-09 06:10:40] [EMAIL PROTECTED] It is expected behavior. Although I agree it is not very handy that this is not possible. Making this a feature request. Derick ------------------------------------------------------------------------ [2001-10-09 06:07:02] [EMAIL PROTECTED] Having carefully searching the bugs database and drawn a blank on this( I made sure to include 'closed' and 'bogus' entries in my search!), I would like to point out that the new 'heredoc' syntax (which is GREAT) has a little bug that could prove troublesome as it is hard to spot. The bug is that you can't put anything other than the 'return' character after the semi-colon that closes the statement. Even a single white space character after the semi-colon forces a parse error. This can be a poser, especially if the user's editor can't display non-printing characters. Typically, this kind of thing won't work: $query = <<< SQL SELECT parentID FROM messages WHERE msgID = $msgID SQL; // Can't put a comment (or anything else) here! I encountered the same bug with both the PWS and the Apache ISAPI module version. ------------------------------------------------------------------------ Edit this bug report at http://bugs.php.net/?id=13610&edit=1 -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]