mpyw mpyw - 5 months ago 19
PHP Question

Why do these Heredoc and Nowdoc cause errors?

I've already found some solutions, but can't know what happened...

Example 1:

<?php

echo <<< EOD
test
EOD;


Example 2:

<?php

echo <<< 'EOD'
test
EOD;


Output 1,2:

PHP Parse error: syntax error, unexpected end of file, expecting variable (T_VARIABLE) or heredoc end (T_END_HEREDOC) or ${ (T_DOLLAR_OPEN_CURLY_BRACES) or {$ (T_CURLY_OPEN)


Example 3:

<?php

echo <<< EOD
test
EOD;

?>


Example 4:

<?php

echo <<< 'EOD'
test
EOD;

?>


Example 5:

<?php

echo <<< EOD
test
EOD;
'dummy';


Example 6:

<?php

echo <<< 'EOD'
test
EOD;
'dummy';


Output 3,4,5,6:

test

Answer

You probably have spaces after the terminator in your first two examples, e.g.

EOD;[space]

With this:

<?php
echo <<<EOL
test
EOL;[space]

I get your error message, but WITHOUT the space, there's no error. And that's true whether there's a closing ?> or not.