php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #13610 heredoc: any chars (even white space) after closing ";" causes error
Submitted: 2001-10-09 06:07 UTC Modified: 2002-05-09 02:43 UTC
Votes:2
Avg. Score:3.5 ± 0.5
Reproduced:1 of 1 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: rprangnell at hotmail dot com Assigned:
Status: Closed Package: Feature/Change Request
PHP Version: 4.0.6 OS: Windows98
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: rprangnell at hotmail dot com
New email:
PHP Version: OS:

 

 [2001-10-09 06:07 UTC] rprangnell at hotmail dot com
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.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-10-09 06:10 UTC] derick@php.net
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 16:27 UTC] jeroen@php.net
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 17:59 UTC] jeroen@php.net
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('jeroen@php.net', 'heredoc test', <<<TEXT
Hello Jeroen,

Greets!
TEXT, 'Cc: bla@example.com');
?>

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.
 [2002-01-28 21:56 UTC] torben@php.net
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. stat@php.net 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;


 [2002-01-28 22:00 UTC] torben@php.net
Yeesh. Scratch that. :) The issue remains but the patch I 
just posted here indicates a seious need for supper.


Torben
 [2002-05-08 14:26 UTC] destes at ix dot netcom dot com
This would be very useful to change.  Additionally if/when this is closed, Bug #5804 is a duplicate of this.  Thanks,

Steve
 [2002-05-09 02:43 UTC] yohgaki@php.net
IIRC. This has been discussed and we decided not to have this change.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Nov 23 19:01:29 2024 UTC