Je suis tombé sur cette balise PHP <?= ?>
récemment et je suis réticent à l'utiliser, mais ça me démange tellement que je voulais avoir votre avis. Je sais que c'est une mauvaise pratique d'utiliser des balises courtes <? ?>
et que nous devrions utiliser des balises complètes à la <?php ?>
place, mais qu'en est-il celui-ci <?= ?>
:?
Cela économiserait un peu de frappe et ce serait mieux pour la lisibilité du code, IMO. Donc au lieu de cela:
<input name="someVar" value="<?php echo $someVar; ?>">
Je pourrais l'écrire comme ça, ce qui est plus propre:
<input name="someVar" value="<?= $someVar ?>">
L'utilisation de cet opérateur est-elle mal vue?
echo
mène très facilement à XSS, et vous devriez vous fier à une méthode d'écho personnalisée (c.-à-d. Avoir unfunction html($x) { echo htmlentities($x,...); }
et unhtml($someVar);
au lieu deecho $someVar
ou utiliserecho json_encode($x);
pour un contexte JS). Cela rend alors les<?=
balises une mauvaise pratique car cela signifie que le contenu de la variable a été échappé par HTML et que cet endroit doit savoir comme par magie que cette variable doit être échappée au format HTML car elle est répercutée dans le contexte HTML.Réponses:
Histoire
Avant que le train de fausses informations ne parte trop loin de la gare, vous devez comprendre beaucoup de choses sur les balises courtes PHP.
Le principal problème des balises courtes de PHP est que PHP a réussi à choisir une balise (
<?
) utilisée par une autre syntaxe, XML .Avec l'option activée, vous ne pouviez pas générer la déclaration XML sans générer d'erreur de syntaxe:
Ceci est un gros problème lorsque vous considérez à quel point l'analyse et la gestion XML sont courantes.
Qu'en est- il
<?=
?Bien que
<?
provoque des conflits avec XML,<?=
ne le fait pas . Malheureusement, les options d'activation et de désactivation de l'option étaient liéesshort_open_tag
, ce qui signifiait que pour tirer avantage de la balise echo courte (<?=
), il fallait gérer les problèmes posés par la balise ouverte courte (<?
). Les problèmes associés à la balise ouverte courte étaient bien plus importants que les avantages de la balise écho courte. Vous trouverez donc un million et demi de recommandations àshort_open_tag
désactiver, ce que vous devriez .Avec PHP 5.4, toutefois, la balise echo courte a été réactivée séparément de l'
short_open_tag
option. Je vois cela comme une approbation directe de la commodité de<?=
, étant donné que rien en lui-même n'est faux.Le problème est que vous ne pouvez pas en garantir le résultat
<?=
si vous essayez d'écrire du code pouvant fonctionner dans un plus grand nombre de versions de PHP.ok, alors maintenant que tout cela est hors du chemin
Devriez-vous utiliser
<?=
?la source
<?=
à l'avenir, vous pouvez le réparer en moins d'une minute, peu importe le nombre de milliers de fichiers utilisés, il vous suffit d'effectuer une recherche et un remplacement de l'ensemble<?=
du projet<?php echo
. Ma réponse est que vous n'avez pas à vous inquiéter et que vous l'utilisez , les avantages l'emportent largement sur les conséquences.<?=
n’est plus considéré comme un mot-clé, Rasmus Lerdorf lui-même s’y est engagé.<?=
sera toujours activé ( stackoverflow.com/a/6064813/156257 ) et la plupart du temps, ils étaient allumés. Vous pouvez prouver que je me trompe en vérifiant auprès de votre hôte si: ils sont désactivés et utilisent PHP <5.3 et s'ils n'autorisent pas le paramètre à être écrasé par les utilisateurs ou sur demande spéciale; si tout ce qui précède est faux, ne vous inquiétez pas<?=
.<?=
cela soit supprimé, et moi non plus. D'autres pourraient l'être, et s'ils le sont, ils ne doivent pas en utiliser<?=
. Certaines personnes ont une peur irrationnelle d'utiliser certaines fonctionnalités du langage ( comme de ne pas fermer les balises de fermeture dans php ).Dépoussiérer mon chapeau PHP
Je préférerais définitivement utiliser
<?= $someVar ?>
le plus verbeuxecho
(préférence personnelle). Le seul bémol AFAIK concerne les utilisateurs de versions antérieures à 5.4.0, auquel cas ilsshort_open_tag
doivent être activés dans le fichier php.ini .Cela dit, si votre projet n’est pas un système d’exploitation, alors il s’agit d’un point discutable. Si c'est le cas, je documenterais le fait que
short_open_tag
s doit être activé ou utiliser la plus portable des deux solutions.la source
<?=
n’est pas affecté parshort_open_tag
PHP 5.4,<?
il l’est toujours et si vous prenez l’habitude d’utiliser des balises de formulaire courtes, il est assez facile d’oublier ce qui est supporté par quelle version.<?=
"Je produis une variable maintenant" pour une utilisation de type modèle et<?php
"J'utilise beaucoup de code maintenant". Je suggère de ne jamais utiliser<?
, mais que les deux<?=
et<?php
vont bien.Vous devez absolument essayer d'éviter les balises de forme abrégée, que ce soit
<?
ou<?=
.La raison technique principale est la portabilité, vous ne pouvez jamais être sûr que les balises de forme courte fonctionneront pour chaque configuration donnée, car elles peuvent être désactivées, consultez la
short_open_tag
directive. Mais vous pouvez toujours être absolument certain que le formulaire long fonctionnera partout.C'est aussi une mauvaise habitude. Je ne peux pas vraiment vous dire ce que vous trouvez plus lisible, mais je suis fébrile contre l'utilisation de la lisibilité du code comme excuse pour vous épargner quelques frappes de touche. Si vous êtes préoccupé par la lisibilité, vous devriez vous tourner vers un moteur de template, ceci:
est beaucoup plus lisible à partir de vos deux exemples.
Enfin, il convient de noter que les balises de forme abrégée sont explicitement découragées par les grands projets PHP, tels que PEAR et Zend Framework .
la source
<?php
et auecho
lieu de<?
et<?=
, comptez-vous que le temps sérieux? Et que se passe-t-il lorsque vous déplacez votre projet sur un serveur où, pour une raison quelconque, les balises courtes sont désactivées?La documentation PHP dit clairement que vous pouvez utiliser des balises echo courtes en toute sécurité:
5.4.0 The tag <?= is always available regardless of the short_open_tag ini setting.
Bien que ce soit pour PHP version 5.4 ou supérieure, mais tout le monde devrait au moins utiliser celle-ci. Je les préférerais uniquement à des fins de modèles.
la source
Raisons pour utiliser des balises courtes:
Raisons pour ne pas utiliser de balises courtes:
la source
Je pense que la
<?=
version est une pratique acceptable / acceptable, à condition que vous ne l'utilisiez que pour la sortie finale des variables et évitez tout appel de fonction ou logique ternaire qui n'est pas directement lié à la présentation des données.C'est certainement beaucoup mieux que
<? echo($x); ?>
partout.À long terme, vous voudrez peut-être vous pencher sur des moteurs de modélisation tels que Smarty .
la source
Depuis PHP 7.4, le terrain de jeu change un peu:
<? ?>
est officiellement obsolète et sera supprimé de PHP 8.0.PHP RFC: Deprecate PHP Les balises ouvertes courtes indiquent explicitement que cela
<?= ?>
n'est pas affecté. Cela indiquerait (selon moi, pas le RFC) que son utilisation n'est pas découragée.la source
Pour être honnête, je pense que faire écho à un résultat quelle que soit la méthode utilisée (ancienne ou nouvelle mode) est quelque chose d'assez obsolète alors que MVC célèbre déjà 33 ans.
Je dirais que oui, il est recommandé d’encapsuler les données du serveur entrant (php) dans un document XML et de les traiter dans votre couche applicative / client, vous évitant ainsi l’idée même de l’utilisation d’une telle balise.
la source