PHP удаляет новую строку

При запуске этого файла:

works fine <?php echo 'except when it'; ?> <?php echo 'does not'; ?> 

Я ожидаю увидеть следующий результат:

 works fine except when it does not 

Поскольку после первого выражения echo, очевидно, две строки новой строки, но вместо этого он печатает:

 works fine except when it does not 

Итак, php удаляет новую строку, если в строке нет ничего, кроме php-кода? Почему это происходит?

Единственный реальный комментарий, о котором говорится в руководстве:

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

http://php.net/manual/en/language.basic-syntax.instruction-separation.php

Значение, ?>\n берется как разделитель закрытия блока, и оба они удаляются из окончательного вывода. Я ожидаю, что это удалить ненужные пустые строки в коде следующим образом:

 <ul> <?php foreach (..) ?> <li>..</li> 

Тем не менее, это затрудняет контроль вывода новых строк, и нет изящного способа его решения:

  • добавьте дополнительное пространство после закрывающего тега ( ?> \n ), из-за чего выводится новая строка (но также и пробел)
  • явно эхо-символ новой строки
  • добавить дополнительную строку новой строки после блока PHP

Сама часть PHP не выводит никаких новых строк, потому что вы не дали никаких оснований для этого. Вы можете явно выводить новую строку, повторяя \n как:

 works fine <?php echo 'except when it\n'; ?> <?php echo 'does not'; ?> 

Должен дать правильный результат. За закрывающим тегом следует \n , что \n будет считаться частью закрывающего тега и удаляется из вывода.