Почему эти Heredoc и Nowdoc вызывают ошибки?

Я уже нашел некоторые решения, но не могу знать, что произошло …

Пример 1:

<?php echo <<< EOD test EOD; 

Пример 2:

 <?php echo <<< 'EOD' test EOD; 

Выход 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) 

Пример 3:

 <?php echo <<< EOD test EOD; ?> 

Пример 4:

 <?php echo <<< 'EOD' test EOD; ?> 

Пример 5:

 <?php echo <<< EOD test EOD; 'dummy'; 

Пример 6:

 <?php echo <<< 'EOD' test EOD; 'dummy'; 

Выход 3,4,5,6:

 test 

    Вероятно, у вас есть пробелы после терминатора в ваших первых двух примерах, например

     EOD;[space] 

    С этим:

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

    Я получаю сообщение об ошибке, но БЕЗ пробела нет ошибки. И это правда, есть ли закрытие ?> Или нет.

    Закрывающий разделитель должен начинаться в первом столбце, без пробелов или вкладок, разрешенных перед ним. Имейте в виду, что все меняется в 5.5 и 5.6

    'EOD' эквивалентен echo ' ' ,
    "EOD" эквивалентен echo " " о переменных подстановках.

    Закрывающий разделитель не принимает ни одного двойного кавычки.

    Heredoc очень тонкий. Убедитесь, что после первоначального EOD нет пробелов. И окончательный EOD; должен быть на собственной линии, без пробелов перед ней, и ничего больше на этой линии. Это те пространства, которые дают большинству людей проблемы.

    И цитаты вокруг «EOD» не нужны.

    Мне потребовалось некоторое время, чтобы овладеть heredoc и nowdoc. Heredoc – очень сложный бизнес. Вот трюк, терминаторы всегда должны быть в одиночных линиях, кроме начального терминатора, где вы можете добавить переменную или эхо строку и не забыть ее также не разрешено отступать от закрывающего тега

     <?php $string = <<<EXP // There should be nothing following this terminator <<<EXP You string goes here and it can include commas, quotes etc EXP;// This should be on a single line without anything else. Hit enter to make it contain this line, even if there is nothing to write, still hit enter, because it should be the master of this line $string = <<<EXP2 I am a developer. EXP2// Hit enter, please always do echo $string // Works perfect ?> 

    Еще одна вещь: закрывающий тег не «все, что вы даете», он должен быть действительным идентификатором только с буквенно-цифровыми символами (подчеркивание в порядке), если вы дадите ему любого другого персонажа, вы будете сильно разочарованы.

    Посмотрите:

     $str = <<<'HEY WHAT THE HECK' This will not work and doesn't help you understand why HEY WHAT THE HECK ; 

    PHP даст вам синтаксическую ошибку. Теперь, если вы удалите пробелы,

     $str = <<<'HEYWHATTHEHECK' Suddenly it's all peaches & cream HEYWHATTHEHECK ; 

    (Я просто попытался использовать некоторый UUID, чтобы убедиться, что этого не произойдет внутри строки. После 25 минут ругательства я, наконец, понял это.)

    Счастливый сейчас!