Закрывающий идентификатор heredoc НЕ ДОЛЖЕН иметь вообще никаких символов между началом строки и идентификатором, он МОЖЕТ иметь один ;
НЕМЕДЛЕННО после этого и НЕ ДОЛЖЕН иметь никаких других символов после него. Если идентификатор получает отступ, он должен рассматриваться как часть строки heredoc. Единственный символ, который может появиться перед новой строкой - ;
. Вы даже не можете вставить пробел между идентификатором и ;
или между ;
и новой строкой. Это означает, что если вы используете heredoc внутри вызова функции, вы должны вставить разрыв строки сразу после закрывающего идентификатора (т.е. перед любым ,
или )
и т. Д.).
Другими словами, единственное, что может появиться в строке с закрывающим идентификатором, это сам идентификатор и, необязательно, одна точка с запятой (;
) сразу после идентификатора. Следующий символ (если не в конце файла) ДОЛЖЕН быть действительным символом новой строки для операционной системы, на которой работает PHP.
Это допустимая строка heredoc:
$text = <<<EOT
Hello!
EOT;
Эта строка heredoc не была закрыта, и EOT;
считается частью строки:
$text = <<<EOT
Hello!
EOT;
Предыдущий пример исправлен:
$text = <<<EOT
Hello!
EOT;
Heredoc внутри вызова функции (обратите внимание, что );
должен появиться в новой строке для работы):
print(<<<EOT
Hello!
EOT
);
То же, что и выше, с очень странным отступом (обратите внимание, что единственная вещь в закрывающей строке идентификатора - это идентификатор и новая строка). Hello!
будет иметь пять пробелов перед строкой:
print(<<<EOT
Hello!
EOT
);