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]