Do not mis interpret
<?php echo 'Ending tag excluded';
with
<?php echo 'Ending tag excluded';
<p>But html is still visible</p>
The second one would give error. Exclude ?> if you no more html to write after the code.
Separação de instruções
Como no C ou Perl, o PHP requer que as instruções sejam terminadas com um ponto-e-vírgula ao final de cada comando. A tag de fechamento de um bloco de código PHP automaticamente implica em um ponto-e-vírgula; você não precisa ter um ponto-e-vírgula terminando a última linha de um bloco PHP. A tag de fechamento irá incluir uma nova linha logo após, se estiver presente.
<?php
echo 'Isto é um teste';
?>
<?php echo 'Isto é um teste' ?>
<?php echo 'Nós omitimos a última tag de fechamento';
Nota:
A tag de fechamento de um bloco PHP ao final de um arquivo é opcional, e em alguns casos omiti-la é útil ao usar include ou require, assim espaço em branco indesejado não irá aparecer ao final dos arquivos, e você ainda será capaz de adicionar cabeçalhos a resposta após. Também é útil se você usar output buffering, e você não quer ter adicionado um espaço em branco ao final das partes geradas por arquivos incluídos.
If you want to keep the newline after a closing tag in the output, just add a space after the closing tag, and the newline will not be ignored.
If you are embedding this in XML, you had better place the ending '?>' there or the XML parser will puke on you. XML parsers do not like processing instructions without end tags, regardless of what PHP does.
If you're doing HTML like 90% of the world, or if you are going to process/interpret the PHP before the XML parser ever sees it, then you can likely get away with it, but it's still not best practice for XML.
One newline character (or sequence) is dropped out by the parser after "?>", so you can add the beloved "final newline" to your file after "?>"
Example for plain text outputs:
<? foreach($array as $elem){ ?>
Value: <?=$elem?>
<? } ?>
(You have to add an extra enter after <?=$elem?> if you want to see a newline in the output.
