Delimitador de código PHP

Artigo que apresenta a sintaxe dos delimitadores de código PHP e suas características.

Muitos programadores usam os delimitadores de código PHP sem saber todos os seus detalhes. Vamos a eles então.


Delimitadores

Primeiro, existem diferentes delimitadores. O mais comum é o <?php ... ?>.

Existem ainda:

  • <? ... ?> que é uma forma abreviada
  • <script language="php">...</script> que é uma forma parecida com inclusão de código JavaScript
  • <% ... %> que é uma cópia dos delimitadores do ASP

E alguns atalhos:

  • <?= ... ?> que é uma forma abreviada de <? echo ... ?>
  • <%= ... %> que é uma forma abreviada de <% echo ... %>

Para usar a forma abreviada, é preciso que a diretiva do PHP "short_open_tag" esteja ativada. Algumas versões do PHP não permitem que o programador altere esta diretiva com a função ini_set. Portanto, esta notação não é recomendada para sistemas que serão distribuídos ou instalados em servidores em que você não tem acesso às configurações do PHP.

Para a notação ASP, é a mesma história. Precisa da diretiva "asp_tags", que nem sempre é configurável pelo programador.

E a notação semelhante a JavaScript é muito grande e inconveniente. A princípio, a única vantagem que vejo nesta notação seria para gerar um código que passa por um parser de XML. Afinal <script> seria considerada uma tag como qualquer outra. O problema, no entanto, é que dentro do código não poderia ser usado sinais de maior ou menor (para comparações, por exemplo), com risco do XML não ser mais válido.

Eu recomendo apenas a forma mais usual pois ela independe de configuração.


Fecha PHP é Opcional

Uma observação é que o fechamento de código PHP, o "?>" é opcional. Isso mesmo! Nem todo mundo sabe, mas não é necessário fechar o código PHP se, depois dele, não existe código nem texto. Isso é muito útil para evitar que se esqueçam espaços após o fechamento do PHP e, com isso, não se consiga usar corretamente as funções que enviam header HTTP para o cliente. Por exemplo, usar a função setcookie, header, etc. Isso porque o header HTTP só pode ser enviado se nenhum conteúdo foi enviado e um espaço ou quebra de linha também são considerados textos.


Fecha PHP inclui um delimitador de instruções

Outra coisa que nem todos sabem é que o "fecha PHP" embute um delimitador de instruções (ponto e vírgula). Isso significa que antes de ?>, normalmente não precisa ser colocado um ";".

Exemplo de código válido:

<?php echo 'a' ?><?php echo 'b' ?>

Só precisa tomar cuidado quando estiver tratando de notação heredoc ou nowdoc.

O código abaixo é inválido:

<?php
echo <<<TEXTO
oi
TEXTO ?>

Nestes casos, é preciso que o fechamento do heredoc ou nowdoc esteja sozinho na linha. Então o fechamento deve vir na linha seguinte:

<?php
echo <<<TEXTO
oi
TEXTO
?>

2 comentários

Dermeval disse...

Não a muito tempo instalei uma versão mais nova do EasyPhp que usa o php 5, estava usando o php 4 e qual não foi minha surpresa ao ver diversos códigos dando problema no meu blog, só depois vim descobrir que na versão 5 já vem como padrão a obrigatoriedade de usar a forma completa do delimitador, poderia habilitar localmente mas achei melhor modificar os códigos pois quando colocar na web não terei surpresas desagradáveis

Anônimo disse...

Olá Rubens Eu estou Com Um Problema Para Adicionar Um Codigo De Contador De Visitas no Meu Blog, Pois Quando Tento Salvar o Tema, Ele Mostra Esse Erro. Erro ao analisar XML, linha 1698, coluna 440: The reference to entity "digit" must end with the ';' delimiter.

É Possivel Você Me Ajudar? meu email é cocawn45@hotmail.com