Question

Je me demande s'il existe un moyen plus court d'insérer du texte en PHP que

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

Par exemple, en utilisant Ruby on Rails, je pourrais définir

city = 'London'

quelque part dans le code, et dans mon fichier .erb, je pourrais faire

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

J'ai lu quelque part ça {$city} pourrait être utilisé, mais je l'ai essayé et ce n'est pas le cas.Existe-t-il donc une forme plus courte que <?php print $var; ?> ?

Était-ce utile?

La solution

Vous pourriez utiliser short_open_tag, qui doivent être activés dans votre configuration, mais cela n'est pas considéré comme une bonne pratique, car cela ne fonctionne que si ceux-ci sont activés -- et ils ne le sont pas toujours (peut-être même pas par défaut)

L'utilisation de balises longues et d'écho/impression peut être plus longue, oui...Mais je recommanderais d’utiliser celles-ci, et non des balises courtes.


Notez également que vous devrez peut-être échapper vos données, lorsqu'elles proviennent d'une source non fiable et/ou peuvent contenir du HTML que vous ne souhaitez pas injecter dans la page, pour éviter les injections de HTML/JS. (voir caractères spéciaux html) :


EDIT après les commentaires, pour ajouter quelques éléments sur short_open_tag :

Pourquoi les balises ouvertes courtes sont-elles prises en compte (du moins par moi ^^ ) mauvaise pratique ?

Tout d'abord, après quelques vérifications, ils ne sont pas activés par défaut :

Pour 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

Désactivé par défaut dans "development" ou "production" paramètres.

Pour PHP 5.2.10 (version la plus récente de 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

Désactivé par défaut dans le "recommended" paramètres


Étant donné que ces paramètres par défaut sont parfois (souvent ?) conservés par les services d'hébergement, il est dangereux de s'appuyer sur short_open_tag étant activé.
(J'ai moi-même rencontré des problèmes avec les personnes handicapées...Et quand on n'est pas administrateur du serveur et qu'on n'a pas les privilèges requis pour modifier ça, ce n'est pas amusant ^^ )

Si vous voulez des chiffres, vous pouvez jeter un oeil à Enquête rapide : short_open_tag support activé ou désactivé par défaut ?
(Pas une preuve scientifique – mais montrez qu'il pourrait être dangereux de les utiliser pour une application que vous rendriez publique)


Comme vous l'avez dit, ceux-ci, lorsqu'ils sont activés, entrent en conflit avec la déclaration XML - cela signifie que vous devez utiliser quelque chose comme ceci :

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

Étant donné que des balises ouvertes courtes existent et peuvent être activées sur le serveur que vous utiliserez, vous ne devriez probablement pas les utiliser <?xml Cependant ;dommage :-(


En fait, en lisant le php.ini recommandé 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.

Celui de PHP 6 est encore plus intéressant :

; 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.

(Peut être la même chose en PHP 5.3 ;je n'ai pas vérifié)


Il y a eu rumeurs les balises ouvertes courtes pourraient être supprimées de PHP 6 ;compte tenu de la partie du php.ini que je viens de publier, ce ne sera probablement pas le cas...mais reste...


Pour donner un argument pointant dans l’autre sens (je dois être honnête, après tout) :utiliser des balises ouvertes courtes pour les fichiers modèles (seulement) est quelque chose qui est souvent fait dans les exemples de Zend Framework qui utilisent des fichiers modèles :

Dans nos exemples et documentation, nous utilisons des balises courtes PHP:

Cela dit, de nombreux développeurs préfèrent utiliser des balises complètes à des fins de validation ou de portabilité.Par exemple, Short_Open_TAG est désactivé dans le fichier PHP.ini.

(source)

Au contraire, pour .php des dossiers :

Les balises courtes ne sont jamais autorisées.Pour les fichiers contenant uniquement du code PHP, la balise de clôture doit toujours être omise

(source)


J'espère que ces informations seront utiles et apporteront une sorte de réponse à votre commentaire :-)

Autres conseils

Si vous quittez le mode PHP, la seule façon d'imprimer la variable est d'y revenir et de l'imprimer comme vous l'avez fait ci-dessus.Vous pouvez rester en mode PHP et utiliser la construction {} que vous avez essayée :

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

J'ai lu quelque part que {$city} pouvait être utilisé

Si vous optez pour un moteur de création de modèles tel que Intelligent tu peux le faire.Cela peut être utile si vous développez en équipe et que certains d'entre eux ne connaissent pas PHP.

Sinon, le plus court que vous obtiendrez est le suivant, en supposant que les balises courtes soient activées :

<?=$city?>

Si ce n'est pas le cas ou si vous créez une application à redistribuer à d'autres, utilisez ceci :

<?php echo $city ?>

Étendez simplement votre bloc PHP et faites ceci :

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

Alternativement, vous pouvez utiliser " " au lieu de " " et remplacer ',$city,' avec $city, mais l'analyse des variables prend plus de temps CPU.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top