The neverending closing tag discussion
[pt-BR]
The discussion about whether programmers should or shouldn’t use the PHP closing tag on their code has started again. I’m a little radical when speaking about some issues, but for me there are basically two excuses for not closing your code:
1 – Laziness – It’s the same (whether the PHP interpreter treats differently or not, I really don’t care) as not closing curly braces in one-line control structures. Laziness in programming, IMHO, can only lead to problems.
2 – Fear – The fear about having a white space injection vulnerability in your app.
None of the above reasons is valid for me. Programmers are responsible for the code they write. It’s only natural that a programmer is self assured and has control of his/her source code. Therefore if the code will or will not have a white space at the end is a programmer’s responsibility.
To avoid this by not putting a PHP close tag at the end of the file is a demonstration of lack of self assurance. It’s an easy solution in a professional area where “easy” rarely – or at least it should rarely – applies to anything.Unfortunately a lot of PHP programmers have the bad habit of pursuing “easy” and “safe” solutions that don’t directly depend on them.
You might find my words too harsh, but I consider them true nevertheless. Oh, and relax, after all this is a “one guy’s opinion”.
Update: I was taking a look at the comments on the twitter poll which generated this post and I couldn’t help to add this: PHP Official Documentation states that the closing tag is optional (when dealing with pure PHP code, of course), while Zend Framework’s Coding Style Documentation states that it’s “never permitted”. This is quite an absurd. If the language itself states that something is optional, any related tool should respect this.
A discussão sobre se programadores devem ou não usar a tag de fechamento PHP em seu código recomeçou. Eu sou meio radical para falar sobre alguns assuntos, mas para mim existem basicamente duas desculpas para não fechar o seu código:
1 – Preguiça – É a mesma coisa (mesmo que o interpretador PHP trate isso de forma diferente ou não, eu relmente não me importo) que não fechar uma chave em estruturas de controle de apenas uma linha. Preguiça em programação, IMHO, só pode levar à problemas.
2 – Medo – O medo de ter uma vulnerabilidade de injeção de espaço em branco em sua aplicação.
Nenhuma das razões acima é válida para mim. Programadores são responsáveis pelo código que escrevem. É apenas natural que um programador seja seguro e tenha controle do seu código-fonte. Consequentemente se o código terá ou não um espaço em branco no final é uma responsabilidade do programador.
Evitar isso por não colocar a tag de fechamento PHP no fim do arquivo é uma péssima demonstração de falta de segurança pessoal. É uma solução fácil em uma área profissional onde “fácil” raramente – ou pelo menos raramente devia – se aplica à qualquer coisa. Infelizmente muitos programadores PHP têm o péssimo hábito de procurar soluções “fáceis” e “seguras” que não dependem diretamente deles.
Você pode achar minhas palavras muito duras, mas eu as considero verdadeiras de qualquer forma. Ah, e relaxe, isso é, apesar de tudo, a “opinião de um cara”.
Update: Estava dando uma olhada nos comentários da pesquisa do Twitter que gerou esse post e não pude deixar de adicionar isso: a Documentação Oficial do PHP declara que a tag de fechamento é opcional (em se tratando de código PHP puro, obviamente), enquanto que a Documentação de Estilo de Código do Zend Framework declara que ela “nunca é permitida”. Isto é um belo absurdo. Se a própria linguagem declara que algo é opcional qualquer ferramenta relacionada deveria respeitar isso.

Com certeza segurança nunca foi um argumento plausível para má programação. Se existe a abertura e o fechamento de tags de programação, assim como as de html, elas devem ser usadas. Não é porque não se escreverá mais nada que poderemos ignorar o ponto final de uma redação.
Assim como os escritores, são os detalhes que evidenciam os bons programadores. Detalhes que se transformam em toda a diferença.
Neste ponto, sou radical como você.
Obrigado por seu comentário, Rafael. Ah, e obrigado também pelo seu “radicalismo solidário” =)