Does someone know more about it? I just can see that in
zend_language_scanner.l are these rules:
NEWLINE ("\r"|"\n"|"\r\n")
<ST_IN_SCRIPTING>"<<<"{TABS_AND_SPACES}{LABEL}{NEWLINE} {
...
BEGIN(ST_HEREDOC);
...
}
<ST_HEREDOC>^{LABEL}(";")?{NEWLINE} {
...
BEGIN(ST_IN_SCRIPTING);
...
}
It seems that it was intended to accept all types of newlines but \r
is not accepted on Linux/Windows nor on MacOS (maybe only X) in fact.
Jakub Vrana
> ID: 26582
> User updated by: iwd32900 at yahoo dot com
> Reported By: iwd32900 at yahoo dot com
> -Status: No Feedback
> +Status: Open
> Bug Type: Documentation problem
> Operating System: Darwin/Mac OS X
> PHP Version: 4.3.4
> New Comment:
> No, it doesn't work with \r.
> I realize that in some sense, \n is the new 'native'
> linefeed for Mac since OS X is Unix based. This doesn't
> change my opinion that PHP should be linefeed-agnostic,
> so that code can easily be transported from one platform
> to another.
> Previous Comments:
> ------------------------------------------------------------------------
> [2003-12-18 05:21:18] [EMAIL PROTECTED]
> No feedback was provided. The bug is being suspended because
> we assume that you are no longer experiencing the problem.
> If this is not the case and you are able to provide the
> information that was requested earlier, please do so and
> change the status of the bug back to "Open". Thank you.
> ------------------------------------------------------------------------
> [2003-12-10 09:39:06] [EMAIL PROTECTED]
> Does heredoc work for you with \r?
> ------------------------------------------------------------------------
> [2003-12-10 09:12:36] iwd32900 at yahoo dot com
> Description:
> ------------
> The current manual says this, under the "Heredoc"
> section in "Strings" in "Types":
> -----
> It's also important to realize that the first character
> before the closing identifier must be a newline as
> defined by your operating system. This is \r on
> Macintosh for example.
> If this rule is broken and the closing identifier is not
> "clean" then it's not considered to be a closing
> identifier and PHP will continue looking for one. If in
> this case a proper closing identifier is not found then
> a parse error will result with the line number being at
> the end of the script.
> -----
> I have two issues with this.
> 1. This doesn't appear to be true. I'm using the
> entropy.ch distribution of 4.3.4, and it accepts \n as a
> linefeed before the end marker on my Mac.
> 2. One of the great things about PHP is that it's cross-
> platform portable. The interpretter otherwise seems to
> be linefeed-agnostic; it should be here, too. That way,
> I can write my scripts on any platform and distribute
> them to any other, and no one has to worry about
> something as irritating as linefeeds. Just check for any
> of \n, \r, or \r\n before a heredoc terminator. Should
> be really easy, and it will do a lot for making PHP more
> platform independent.
> Reproduce code:
> ---------------
> $heredoc = <<<HEREDOC
> Does this cause a parse error?
> HEREDOC;
> echo $heredoc;
> // No, it doesn't
> Expected result:
> ----------------
> Given what the manual says, this should break since the
> linefeeds are Unix but it was run on a Mac.
> The documented behavior isn't the DESIRABLE behavior,
> however. PHP should accept all linefeed types on all
> platforms to promote code portability.
> Actual result:
> --------------
> The example works just fine on my Mac, actually. It may
> be that the cross-platform behavior is already
> implementd, and just hasn't been documented yet.
> ------------------------------------------------------------------------