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:

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;




Previous Comments:
------------------------------------------------------------------------

[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]

Reply via email to