Fechar ou não fechar php

14

Eu li que é aconselhável (especialmente com o php 7) não fechar os arquivos php com ?>

Muitos dos meus arquivos php WP terminam assim:

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Devo remover a tag de fechamento e ter algo parecido com isto

<?php get_sidebar(); ?>
<?php get_footer(); 

no final dos meus arquivos?

IXN
fonte
2
Se não houver nada depois da tag php não fechada, tudo está bem, como observei em muitos frameworks como o Laravel, eles não fecham a tag php no final dos arquivos e, a propósito, os arquivos principais do WordPress também seguiram o mesmo padrão e não fechou a tag php no final, então acho que devemos seguir o estilo de codificação do WordPress e não fechá-los.
Amirmasoud 04/04
1
Possivelmente bilhete relacionado no trac: # 10633
Sven

Respostas:

19

Sim, evite fechar as tags PHP no final do arquivo, não apenas no PHP 7, mas também no PHP 5.

O motivo é que, se você fechar a tag, tudo o que estiver após a tag, mesmo uma linha em branco, será enviado para a saída e fará com que o PHP envie cabeçalhos, além de impedir a configuração de cookies, redirecionar para o trabalho, alimentar para ser válido, e assim por diante.

Eu acho que você já encontrou uma mensagem como

Não é possível modificar as informações do cabeçalho - os cabeçalhos já enviados por (saída iniciada em ...) em ... on line ...

Um fechamento ?>no final do arquivo pode ser a causa.

gmazzap
fonte
1
Eu acredito que esta é a resposta correta. Até o Underscores , de onde originalmente obtive meu modelo, removeu a tag de fechamento na atualização mais recente.
IXN 04/12/2015
@IXN Isso está correto se o arquivo inteiro for PHP e, portanto, consiste em um único bloco de código PHP (o bloco de código PHP está implicitamente fechado no final do arquivo). No entanto, se você tiver vários blocos de código PHP e estiver misturando HTML e PHP, como está implícito no exemplo da sua pergunta, feche explicitamente o bloco de código PHP, como afirma TheDeadMedic em sua resposta.
precisa saber é o seguinte
Eu acho que a única exceção é se o último bloco de código php for seguido por html. Mas se os últimos símbolos no arquivo forem?> Eles podem / devem ser omitidos. Ou então eu entendo.
IXN 7/12/15
A principal razão para omitir (ou incluir) a tag PHP de fechamento é evitar a introdução de erros bobos durante o desenvolvimento. Como mencionado acima, para um arquivo totalmente em PHP, isso pode evitar saída acidental, resultando em erro. Para um arquivo que já está misturando saída HTML e PHP, isso não pode resultar em erro. No entanto, a omissão da tag PHP de fechamento neste segundo caso tem potencial para apresentar erros, já que agora você precisa se lembrar de fechar explicitamente a tag PHP antes de adicionar o conteúdo HTML à direita - isso não é algo que você faz no arquivo de código PHP.
precisa
Se você procurar na fonte WP, verá que (a maioria) do PHP inclui omitir a tag PHP à direita. No entanto, os arquivos de modelo (que combinam blocos de código HTML e PHP) sempre incluem a tag PHP de fechamento.
precisa saber é o seguinte
11

Dado o seu exemplo específico, eu manteria a marca de fechamento, ou seja, as chamadas de função em uma linha dentro de um modelo. É consistente e ajuda na clareza (da mesma forma que o WordPress recomenda vírgulas finais para matrizes ) - caso contrário, imagine se um não desenvolvedor pegou seu arquivo e começou a adicioná-lo:

<?php get_footer();

<div>What the hell am I doing wrong?</div>

No entanto, para todos os outros arquivos (funções, inclui etc.), o conselho é definitivamente uma boa ideia:

<?php // Start of file

class MY_Class {
    function just_do_it() {
    }
}

// Bye bye closing tag

Acho que é mais limpo e, como outros já mencionaram, não há risco dos temidos "cabeçalhos já enviados".

TheDeadMedic
fonte