Encontrei essa tag PHP <?= ?>
recentemente e reluto em usá-la, mas é tão difícil que eu queria que você entendesse. Sei que é uma má prática usar tags curtas <? ?>
e que devemos usar tags completas <?php ?>
, mas e essa <?= ?>
:?
Isso economizaria algumas digitações e seria melhor para a legibilidade do código, IMO. Então, em vez disso:
<input name="someVar" value="<?php echo $someVar; ?>">
Eu poderia escrever assim, que é mais limpo:
<input name="someVar" value="<?= $someVar ?>">
O uso deste operador é mal visto?
echo
leva muito facilmente ao XSS, e você deve confiar melhor no método de eco dedicado ao contexto (ou seja: ter umfunction html($x) { echo htmlentities($x,...); }
e un emhtml($someVar);
vez deecho $someVar
ou usarecho json_encode($x);
para o contexto JS). Isso torna as<?=
tags uma prática inadequada, porque significa que você escapou do conteúdo da variável em HTML em outro local e, portanto, outro local deve saber magicamente que essa variável deve ser escapada ao HTML porque é ecoada no contexto HTML.Respostas:
História
Antes que o trem de desinformação fique muito longe da estação, há várias coisas que você precisa entender sobre as tags curtas do PHP.
O principal problema com as tags curtas do PHP é que o PHP conseguiu escolher uma tag (
<?
) usada por outra sintaxe, XML .Com a opção ativada, você não conseguiu gerar a declaração xml sem gerar erros de sintaxe:
Esse é um grande problema quando você considera o quão comum é a análise e o gerenciamento de XML.
Que tal
<?=
?Embora
<?
cause conflitos com xml,<?=
não . Infelizmente, as opções para ativá-lo e desativá-lo estavam vinculadasshort_open_tag
, o que significava que, para obter o benefício da tag curta de eco (<?=
), você precisava lidar com os problemas da tag curta aberta (<?
). Os problemas associados à marca aberta curta eram muito maiores do que os benefícios da marca de eco curto; portanto, você encontrará um milhão e meio de recomendações parashort_open_tag
desativar, o que você deve fazer .Com o PHP 5.4, no entanto, a tag de eco curto foi reativada separadamente da
short_open_tag
opção. Eu vejo isso como um endosso direto à conveniência de<?=
, pois não há nada de fundamentalmente errado com ele por si só.O problema é que você não pode garantir isso
<?=
se estiver tentando escrever um código que possa funcionar em uma variedade maior de versões do PHP.ok, agora que está tudo fora do caminho
Você deveria usar
<?=
?fonte
<?=
no futuro, você pode corrigi-lo em menos de um minuto, não importa quantos milhares de arquivos de usá-lo, basta fazer uma busca em todo o projeto e substituir de<?=
para<?php echo
. Minha resposta é não se preocupe e apenas use , os benefícios superam as consequências.<?=
não é mais visto como uma marca curta, o próprio Rasmus Lerdorf se comprometeu.<?=
estará sempre ativado ( stackoverflow.com/a/6064813/156257 ) e na maioria das vezes eles costumavam estar. Você pode provar que estou errado, verificando com seu host se: eles estão desabilitados e usam PHP <5.3 e se não permitem que a configuração seja substituída pelos usuários ou mediante solicitação especial; se todo o anterior é falso, por todos os meios se preocupe<?=
.<?=
remoção e nem eu. Outros podem estar, e se estiverem, não precisam usar<?=
. Algumas pessoas têm um medo irracional de usar certos recursos do idioma ( como deixar de fechar as tags no php ).Tirando o pó do meu chapéu PHP
Eu definitivamente preferiria o uso de
<?= $someVar ?>
mais verbosoecho
(simplesmente preferência pessoal). A única desvantagem do AFAIK é para usuários que executam a versão anterior à 5.4.0. Nesse caso,short_open_tag
deve ser ativado no php.ini .Agora, tendo dito isso, se o seu projeto não for um SO, é um ponto discutível. Se for, eu documentaria o fato de que
short_open_tag
s deve estar ativado ou use a mais portátil das duas soluções.fonte
<?=
seja afetado peloshort_open_tag
PHP 5.4,<?
ainda é e se você tem o hábito de usar tags de formato curto, é muito fácil esquecer o que é suportado em qual versão.<?=
como "Estou produzindo uma variável agora" para uso no estilo de modelo e<?php
como "Estou executando muito código agora". Eu sugiro nunca usar<?
, mas que ambos<?=
e<?php
estão bem.Você definitivamente deve tentar evitar tags de formato curto, seja
<?
ou não<?=
.O principal motivo técnico é a portabilidade, você nunca pode ter certeza de que as tags de formato curto funcionarão para todas as configurações, pois podem ser desativadas, procurando a
short_open_tag
diretiva. Mas você sempre pode estar absolutamente certo de que a forma longa funcionará em todos os lugares.Isso também é um mau hábito. Eu realmente não posso te dizer o que você acha mais legível, mas sou febrilmente contra usar a legibilidade do código como uma desculpa para poupar algumas teclas. Se você está preocupado com a legibilidade, opte por um mecanismo de modelo:
é muito mais legível nos dois exemplos.
Por fim, vale a pena notar que as tags de formato curto são explicitamente desencorajadas pelos principais projetos PHP, por exemplo, PEAR e Zend Framework .
fonte
<?php
e, emecho
vez de<?
e<?=
, você considera isso um período sério? E o que acontece quando você move seu projeto para um servidor em que, por algum motivo, as tags curtas estão desabilitadas?A documentação do PHP diz claramente que você pode usar tags de eco curtas com segurança:
5.4.0 The tag <?= is always available regardless of the short_open_tag ini setting.
Embora isso seja para o PHP versão 5.4 e superior, todos deveriam pelo menos usar este. Eu os preferiria apenas para fins de modelo.
fonte
Razões para usar tags curtas:
Razões para não usar tags curtas:
fonte
Eu acho que a
<?=
versão é uma prática boa / aceitável, desde que você a use apenas para saída final de variáveis e evite chamadas de função ou lógica ternária que não estejam diretamente relacionadas à apresentação dos dados.Certamente é muito melhor do que em
<? echo($x); ?>
qualquer lugar.A longo prazo, você pode pesquisar mecanismos de modelagem, como o Smarty .
fonte
A partir do PHP 7.4, o campo de jogo muda um pouco:
<? ?>
foi oficialmente descontinuado e será removido no PHP 8.0.PHP RFC: descontinuar PHP Short tags abertas afirma explicitamente que
<?= ?>
não é afetado. Isso indicaria (de acordo com mim, não o RFC) que seu uso não é desencorajado.fonte
Para ser sincero, acho que ecoar um resultado, seja qual for o método (moda antiga ou nova), é algo bastante obsoleto, enquanto o MVC comemora 33 anos.
Eu diria que sim, essa é uma boa prática para encapsular os dados do servidor de entrada (php) em um documento XML e processá-lo em sua camada de aplicativo / cliente, economizando assim a idéia de usar essa marca.
fonte