Pergunta

Eu estou querendo saber se existe um caminho mais curto de inserção de texto em PHP que

<?php
$city = "London";
?>
This website is a funky guide to <?php print $city; ?>!!!

Por exemplo, usando ruby ??on rails, eu poderia definir

city = 'London'

em algum lugar no código, e no meu arquivo .erb eu poderia fazer

This website is a funky guide to <%= city %>!!!

Eu fiz algum lugar leitura que {$city} poderia ser usado, mas eu tentei e isso não aconteceu. Então, há uma forma mais curta do que <?php print $var; ?>?

Foi útil?

Solução

Você pode usar short_open_tag , que tem que ser habilitado na sua configuração, mas isso não é considerado como uma boa prática, uma vez que só funciona se aqueles são ativados - e eles nem sempre são (talvez nem mesmo por padrão)

O uso de marcas longas e eco / impressão pode ser mais longo, sim ... Mas eu recomendo usar aqueles, e não tags curtas.


Observe também que você pode precisar para escapar de seus dados, quando se trata de uma fonte confiável-un e / ou podem conter HTML você não quer se injetado na página, para evitar injeções de HTML / JS (ver htmlspecialchars ) :


EDIT após os comentários, para adicionar algumas coisas sobre short_open_tag:

Por que são tags abertas curtas consideradas (pelo menos por mim ^^) má prática?

Em primeiro lugar, depois de alguns testes, eles não são habilitadas por padrão:

Para o PHP 5.3:

squale@shark:~/temp/php/php-5.3.0
$ grep 'short_open_tag' php.ini-development
; short_open_tag
short_open_tag = Off
squale@shark:~/temp/php/php-5.3.0
$ grep 'short_open_tag' php.ini-production
; short_open_tag
short_open_tag = Off

desativado por padrão em qualquer "development" ou configurações "production".

Para o PHP 5.2.10 (versão mais recente do PHP 5.2) :

squale@shark:~/temp/php/php-5.2.10
$ grep 'short_open_tag' php.ini-dist
short_open_tag = On
squale@shark:~/temp/php/php-5.2.10
$ grep 'short_open_tag' php.ini-recommended
; - short_open_tag = Off           [Portability]
short_open_tag = Off

desativado por padrão nas configurações "recommended"


Considerando essas configurações padrão são, por vezes, (muitas vezes?) mantido por serviços de hospedagem, é perigoso confiar em short_open_tag sendo ativado.
(Eu mesmo correr em problema com aqueles que estão sendo desativados ... E quando você não está administrador do servidor e não têm privilegies obrigados a modificar isso, não é divertido ^^)

Se você quiser alguns números, você pode dar uma olhada em survery rápido: apoio short_open_tag ligado ou desligado por padrão?
(Não é uma prova científica - mas mostrar que poderia ser perigoso usar aqueles para uma aplicação que você liberar para o público)


Como você disse, aqueles,, conflito com a declaração XML quando ativados - meios você tem que usar algo como isto:

<?php echo '<?xml version="1.0" encoding="UTF-8" ?>'; ?>

Considerando etiquetas curto abertos existe, e pode ser ativado no servidor que você vai usar, você deve provável não usar <?xml nunca, embora; muito ruim : - (


Na verdade, a leitura através do php.ini-recomendada de PHP 5.2.10:

; Allow the <? tag.  Otherwise, only <?php and <script> tags are recognized.
; NOTE: Using short tags should be avoided when developing applications or
; libraries that are meant for redistribution, or deployment on PHP
; servers which are not under your control, because short tags may not
; be supported on the target server. For portable, redistributable code,
; be sure not to use short tags.

O de PHP 6 é ainda mais interessante:

; This directive determines whether or not PHP will recognize code between
; <? and ?> tags as PHP source which should be processed as such. It's been
; recommended for several years that you not use the short tag "short cut" and
; instead to use the full <?php and ?> tag combination. With the wide spread use
; of XML and use of these tags by other languages, the server can become easily
; confused and end up parsing the wrong code in the wrong context. But because
; this short cut has been a feature for such a long time, it's currently still
; supported for backwards compatibility, but we recommend you don't use them.

(pode ser o mesmo em PHP 5.3; não se verificar)


Houve rumores curtas marcas abertas pode ser removido do PHP 6; considerando a parcela de php.ini Acabei de publicar, ele provavelmente não vai ... mas, ainda assim ...


Para dar um apontar argumento para outra direção (eu tenho que ser honesto, depois de tudo): usando curtas marcas abertas para arquivos de modelo (apenas) é algo que é muitas vezes feito nos exemplos de Zend Framework que arquivos de modelo use:

Em nossos exemplos e documentação, nós fazer uso de tags curtas PHP:

Dito isso, muitos desenvolvedores preferem usar marcas completos para fins de validação ou portabilidade. Para exemplo, short_open_tag está desativado no arquivo php.ini.recommended, e se você modelo XML em scripts de visualização, curtas marcas abertas fará com que o modelos de falhar validação.

( fonte )

Ao contrário, para arquivos .php:

Tags curtas não são permitidas. Para arquivos contendo apenas o código PHP, o tag de fechamento deve ser sempre omitido

( fonte )


Espero que essas informações são úteis, e trazer algum tipo de resposta para o seu comentário : -)

Outras dicas

Se você alternar do modo PHP, então a única maneira para imprimir a variável é mudar de volta para ele e imprimi-lo como você tem acima. Você podia ficar em modo PHP e usar a construção {} você tentou:

<?php
$city = "London";
echo "This website is a funky guide to {$city}!!!";
?>

Eu fiz algum lugar li que {$ city} pode ser usado

Se você vai para um motor de templates, como Smarty você pode fazer isso. Isso pode ser útil se você está desenvolvendo em uma equipe e alguns deles não sabem PHP.

Caso contrário, o menor que você vai conseguir é o seguinte, supondo que você tenha tags curtas ativado:

<?=$city?>

Se você não fizer isso, ou você está criando um aplicativo para redistribuir a outros, em seguida, usar esse:

<?php echo $city ?>

Apenas estender seu bloco PHP e fazer isso:

<?php
$city = 'London';
echo 'This website is a funky guide to ',$city,' !!!';
?>

Como alternativa, você pode usar "" em vez de '' e substituí ',$city,' com $city, mas é preciso mais tempo de CPU para analisar as variáveis.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top