Doc->Bug #77812 [ReO]: Interactive mode does not recognize PHP 7.3-style heredoc closing identifier
| From: | requinix@php.net | Date: | Sat, 17 Aug 2019 12:19:03 +0000 |
| Subject: | Doc->Bug #77812 [ReO]: Interactive mode does not recognize PHP 7.3-style heredoc closing identifier | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-222285@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=77812&edit=1
ID: 77812
Updated by: requinix@php.net
Reported by: bugs dot php dot net at ss dot st dot tc
-Summary: 7.3 heredoc syntax not documented in manual proper
+Summary: Interactive mode does not recognize PHP 7.3-style
heredoc closing identifier
Status: Re-Opened
-Type: Documentation Problem
+Type: Bug
-Package: Strings related
+Package: Unknown/Other Function
Operating System: *
PHP Version: 7.3
Block user comment: N
Private report: N
New Comment:
I've split the doc bug out into bug #78425, since this report has a fair bit of commentary
about the interactive mode bug.
Previous Comments:
------------------------------------------------------------------------
[2019-08-17 12:10:09] blackknight at iinet dot net dot au
Would it be worth splitting this into two issues? This one is currently classified as a
documentation issue, but the interactive mode issue seems quite distinct.
------------------------------------------------------------------------
[2019-08-01 21:33:33] santiagoarizti at gmail dot com
Ok, after a little bit more playing around with interactive mode, I found the problem, but I cannot
fix it. The php interpreter is ok, it is just the interactive mode that is not recognizing the end
of the flexible heredoc. But, with this combination of lines the interpreter behaves
"correctly"
santiagoarizti@santis-mac:~$ docker run --rm -it php:7.3
Interactive shell
php > echo <<<EOF
<<< > let us see
<<< > EOF /*
<<< > EOF
php > */
php > ;
let us see
php >
I gave the interpreter the old expected ending, but inside a multiline comment, so it doesn't
complain about a missing constant... perhaps that gives an idea of what is causing the issue
------------------------------------------------------------------------
[2019-08-01 21:24:21] santiagoarizti at gmail dot com
The problem in php interactive mode is still there. Here I show How I create a php file and add a
simple function that echoes a string from a heredoc.
But the same function in interactive mode is not even recognized as a complete heredoc, so I cannot
even close the function. see this:
santiagoarizti@santis-mac:~$ docker run --rm -it php:7.3 bash
root@a8df21f382dd:/# echo -e '#!/usr/local/bin/php\n<?php\nfunction sayHello($name) {\n
echo <<<EOF\n hola $name\n EOF;\n}\nsayHello($argv[1]);echo PHP_EOL;\n' >
santi.php
root@a8df21f382dd:/# cat santi.php
#!/usr/local/bin/php
<?php
function sayHello($name) {
echo <<<EOF
hola $name
EOF;
}
sayHello($argv[1]);echo PHP_EOL;
root@a8df21f382dd:/# php santi.php Santiago
hola Santiago
root@a8df21f382dd:/# php -a
Interactive shell
php > function sayHello($name) {
php { echo <<<EOF
<<< > hola $name
<<< > EOF;
<<< > }
Notice how I am still inside heredoc according to php.
Here is a simpler example without anything but an echo:
santiagoarizti@santis-mac:~$ docker run --rm -it php:7.3
Interactive shell
php > echo <<<EOF
<<< > this works fine,
<<< > old syntax
<<< > EOF;
this works fine,
old syntax
php > echo <<<EOF
<<< > this doesn't
<<< > work, new syntax
<<< > EOF;
<<< >
------------------------------------------------------------------------
[2019-04-03 21:07:09] chasepeeler at gmail dot com
So, it doesn't appear the other issue I mentioned in my previous email is actually a bug. The
fact that the migration documentation is incorrect still applies, though.
------------------------------------------------------------------------
[2019-04-03 17:54:07] chasepeeler at gmail dot com
The documentation at https://www.php.net/manual/en/migration73.incompatible.php#migration73.incompatible.core.heredoc-nowdoc
is definitely wrong.
As written:
<?php
$str = <<<FOO
abcdefg
FOO
FOO;
?>
will not produce the error mentioned. Instead, it will give the following:
Parse error: Invalid body indentation level (expecting an indentation level of at least 4)
If you don't indent that line:
<?php
$str = <<<FOO
abcdefg
FOO
FOO;
?>
You'll get an error, but still not the one reported. This appears to be a bug though, as
it's requiring a semicolon after the identifier, despite the fact that documentation says that
is no longer required. See https://bugs.php.net/bug.php?id=76608
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=77812
--
Edit this bug report at https://bugs.php.net/bug.php?id=77812&edit=1