Sont PHP balises courtes acceptable à utiliser?
Voici les informations selon la documentation officielle:
Il y a quatre paires de
l'ouverture et la fermeture des balises qui peuvent être
en PHP. Deux de ceux-ci,<?php ?>
et<script language="php"> </script>
,
sont toujours disponibles. Les deux autres
sont les balises courtes et ASP balises de style, et
peut être activé et désactivé à partir de la
php.ini fichier de configuration. En tant que tel,
alors que certaines personnes trouvent les balises courtes et
Les balises du style ASP pratique, ils sont
moins portable, et généralement pas
recommandé.
Dans mon expérience, la plupart des serveurs ne ont les balises courtes activé. En tapant
<?=
est bien plus pratique que de taper
<?php echo
Les programmeurs de confort est un facteur important, de sorte pourquoi n'est-il pas recommandé?
- Pour répondre à la
why
partie, je voudrais citer Zend PHP 5, certification: "les balises Courtes ont été, pour un temps, la norme dans le monde PHP; cependant, elles ont l'inconvénient majeur de conflit avec XML en-têtes et, par conséquent, ont quelque peu tombé dans l'oubli." - Ce qui est le cas lorsque ce problème survient, est-ce à dire c'est une douleur pour les développeurs de générer du code XML à l'aide de PHP?
- Disons que vous avez des documents XML que vous souhaitez publique, mais que vous souhaitez les documents à php parseable pour quelque raison que ce soit, de sorte que vous faites .xml parseable par votre navigateur. Vous utilisez les balises courtes, de sorte qu'elles sont activées, et, soudain, le document XML est arriver analysée via le XML en-têtes, de casser des choses. M'ont rendu fou à essayer de comprendre ce depuis longtemps. Depuis codes courts ont été désactivés sur n'importe quel serveur je exécuter et toute l'équipe, j'ai travaillé avec de a dû recourir à la non code court
- Si vous strictement regarder le cas pour les quelques personnages, je dirais qu'il n'y en est pas, pour la plupart des gens qui sont sur ce forum, étant donné les scénarios typiques, ils sont.
- Si la documentation a déclaré que ceux-ci étaient mal vus, comment venir en PHP 5.4.0, ils sont maintenant activées?
- J'ai mis en haut de ma config: if (!ini_get('short_open_tag')) { ini_set('short_open_tag', '1') or die("impossible d'activer PHP balises Courtes!"); } Ensuite, si j'ai le die() erreur je peux rechercher et remplacer <? pour <?php. De toute façon, juste une idée.
- De PHP 5.4.0 la short_open_tag directive ne pas inclure les tag echo
<?= $example;?>
! Ceci est très important car l'utilisation de toutes les autres balises courtes est considéré comme futile. De toute façon l'utilisation de l'écho court balise est encouragé à partir de maintenant. Il prévoit une plus lisse et plus propre base de code - esp. dans les fichiers de vue. Donc, pour PHP >= 5.4.0<?= ?>
peut être utilisé sans paramètreshort_open_tag
. S'il vous plaît ne pas utiliser les autres balises courtes dans votre code. Le code-Dieux se fâchent quand vous le faites... - Bien que cette question n'a pas vraiment le StackOverflow format ("non constructive"), j'ai décidé de voter pour le laisser "ouvert" comme je pense que cette question peut être utile pour référence future. Il a reçu beaucoup de votes, ce qui est (OMI) d'une indication claire qu'à titre informatif question.
- Je vais ajouter ce que un rapide commentaire, parce qu'il y a déjà beaucoup trop long réponses:
<?
n'est pas seulement dans le fichier XML pour l'ouverture<?xml version="1.0" ?>
déclaration; c'est la syntaxe générale pour les "instructions de traitement", le 2ème plus souvent d'être<?xml-stylesheet ... ?>
.<?php
peut effectivement être considéré comme une instruction de traitement valide, comme on peut le<?=
(comme l'5.4+), mais revendiquant l'ensemble de<?
ainsi crée des conflits inutiles entre les syntaxes. - "Non recommandé" ne signifie pas que vous ne pouvez pas l'utiliser. Si vous trouvez qu'il rend la vie meilleure pour vous, par tous les moyens d'avoir une explosion. Juste être conscient des mises en garde. De toutes les personnes, les programmeurs doivent être à l'aise avec il y a plus d'une façon de faire les choses. Rendre agréable quand vous le pouvez. S'adapter quand il est prudent.
- Fait amusant: j'ai eu directement la main à convaincre le PHP dev team pour mettre
<?=
en 5.4.0 comme toujours activé. Lors de l'écriture de l'open source, vous devez supposershort_open_tag
est réglé sur "non", mais fermé/propriété du code source peut être de toute façon. Avant même 5.4, j'ai trouvé l'écriture<?php echo
ou<?php print
ad nauseam à être assez ennuyeux et erreurs et, sur les systèmes internes, j'ai activéshort_open_tag
juste pour obtenir l'accès à<?=
. - en effet, le besoin majeur pour
short_open_tag
est venue des anciens systèmes avec le code désordre. Je comprends la nécessité de l'utiliser parfois, mais uniquement pour les systèmes existants. Je considère encore les autres balises courtes un mal qui ne doit pas être utilisé 🙂
Vous devez vous connecter pour publier un commentaire.
Ils ne sont pas recommandés parce que c'est un pain PITA si vous devez déplacer votre code sur un serveur où il n'est pas pris en charge (et vous ne pouvez pas l'activer). Comme vous le dites, beaucoup de des hôtes ne soutien shorttags mais "beaucoup" n'est pas tous d'entre eux. Si vous souhaitez partager vos scripts, il est préférable d'utiliser la syntaxe complète.
Je suis d'accord que
<?
et<?=
sont plus faciles sur les programmeurs de<?php
et<?php echo
mais il est possible de faire un vrac trouver et remplacer aussi longtemps que vous utilisez le même formulaire à chaque fois (et ne pas jeter dans les espaces (par exemple:<? php
ou<? =
)Je n'achète pas la lisibilité comme une raison à tout. Plus grave, les développeurs ont l'option de coloration syntaxique à leur disposition.
Comme ThiefMaster mentionne dans les commentaires, depuis PHP 5.4,
<?= ... ?>
, les balises sont pris en charge partout, quel que soit shorttags paramètres. Cela signifie qu'ils sont sûrs à utiliser dans un code portable, mais cela ne signifie pas il n'y a alors une dépendance sur PHP 5.4+. Si vous voulez soutenir pré-5.4 et ne peut pas garantir shorttags, vous aurez toujours besoin d'utiliser<?php echo ... ?>
.Aussi, vous devez savoir que ASP balises <% , %> , <%= , et la balise de script sont supprimés à partir de PHP 7. Donc, si vous souhaitez soutenir à long terme du code portable et serait, comme le passage à la plupart des outils modernes envisager de modifier certaines parties de code.
<?=
(mais pas<?
en général) est toujours pris en charge comme de PHP 5.4 dès le début de votre réponse. Cette question est #4 quand googler pour php short open tags donc, c'est plutôt important de dire aux gens à ce sujet.<? ... ?>
et<?= ... ?>
. Ce dernier est pris en charge quel que soit le shorttags réglage - voir la deuxième moitié de la poste)Je suis trop friands de
<?=$whatever?>
pour la laisser passer. Jamais eu de problème avec ça. Je vais attendre jusqu'à ce qu'il me mord dans le cul. En toute sincérité, 85% de (mon) les clients ont accès à php.ini dans le rare occasion ils sont éteints. Les autres 15% utiliser les principaux fournisseurs d'hébergement, et pratiquement tous ont leur permis. J'aime em.Depuis PHP 5.4, l'écho de raccourci est une question distincte des balises courtes, comme l'écho de raccourci sera toujours activé. C'est un fait, maintenant:
Donc l'écho de raccourci lui-même (
<?=
) est sûr à utiliser maintenant.<?php
peut être utilisé au début de tous les fichiers de classe, et puis vous avez<?=
pour votre point de vue. win-win.So the echo shortcut itself (<?=) is safe to use
... aussi longtemps que vous êtes à l'aise nécessitant PHP 5.4. Largement distribué applis PHP (comme wordpress) n'ont pas le luxe d'exiger 5.4, et même continué à offrir PHP 4, jusqu'en 2011 -- 7 ans après PHP 5 a été libéré. Si vous êtes à un endroit comme facebook, où toutes les installations de votre logiciel sont exploités directement par l'entreprise elle-même, en demandant alors 5.4 soutien est beaucoup plus facile que si vous travaillez sur un projet comme wordpress.Le problème avec toute cette discussion réside dans l'utilisation de PHP comme langage de templating. Personne n'affirme que les étiquettes devraient être utilisés dans les fichiers source de l'application.
Toutefois PHP intégrable syntaxe permet d'être utilisé comme un puissant modèle de la langue, et des modèles doit être aussi simple et lisible que possible. Beaucoup ont trouvé plus facile d'utiliser un beaucoup plus lent, l'ajout de moteur de template comme Smarty, mais pour les puristes d'entre nous qui demande un rendu rapide et une pure base de code, PHP est le seul moyen d'écrire des modèles.
Le SEUL argument valable CONTRE l'utilisation de balises courtes, c'est qu'ils ne sont pas pris en charge sur tous les serveurs. Commentaires à propos de conflits avec les documents XML sont ridicule, parce que vous ne devriez probablement pas être un mélange de PHP et XML de toute façon, et si vous êtes, vous devriez être en utilisant PHP à la sortie des chaînes de texte. La sécurité ne devrait jamais être un problème, parce que si vous mettez des informations sensibles comme base de données d'informations d'identification d'accès à l'intérieur des fichiers de modèle, eh bien, vous avez plus de questions!
Maintenant, alors, à la question de la prise en charge du serveur, certes, on doit être conscient de leur plate-forme cible. Si l'hébergement mutualisé est une cible probable, puis court, les étiquettes devraient être évités. Mais pour beaucoup de développeurs professionnels (comme moi), le client reconnaît (et en effet, repose sur le fait) que nous dicter la configuration du serveur. Souvent, je suis responsable de la configuration du serveur, moi-même.
Et nous n'avons JAMAIS travailler avec un fournisseur d'hébergement qui ne nous donne pas le contrôle absolu de la configuration du serveur -- dans ce cas, nous avons pu compter sur l'exécution de beaucoup plus de mal que de simplement perdre du court en charge de la balise. Il n'a tout simplement pas se produire.
Donc oui, je suis d'accord que l'utilisation de balises doivent être soigneusement pesés. Mais je crois fermement qu'il devrait TOUJOURS être une option, et qu'un développeur qui est conscient de son environnement doit se sentir libre de les utiliser.
<?
comme une balise courte, parce qu'elle conduit à laide des solutions de contournement sur le langage XML. Cela dit, je suis d'accord que c'est une question de pesée des avantages et des inconvénients, et que si vous savez ce que vous faites, vous pouvez certainement le faire. Mais ce n'est pas<?
un bon choix.Les balises courtes sont de retour grâce à Zend Framework pousser les "PHP comme langage de template" dans leur par défaut MVC configuration. Je ne vois pas ce que le débat est sur, la plupart des logiciels que vous allez produire au cours de votre vie va fonctionner sur un serveur que vous ou votre société de contrôle. Tant que vous restez cohérent, il ne devrait pas y avoir de problèmes.
Mise à JOUR
Après avoir fait un peu de travail avec Magento, qui utilise la forme longue. Comme résultat, j'ai passé à la version longue de l':
sur
Semble comme une petite quantité de travail pour assurer l'interopérabilité.
En raison de la confusion qu'elle peut générer avec les déclarations XML. Beaucoup de gens d'accord avec vous, si.
Une préoccupation supplémentaire est la douleur qu'elle avait de générer de code tout avec les balises courtes pour découvrir seulement à la fin que le dernier serveur d'hébergement a éteint...
include
ourequire
auront PHP parse le fichier. Vous pouvez utiliserfile() and fread()
oufile_get_contents()
simplement la sortie d'un fichier.<?='<?xml'
) ou en disant "vous ne devriez pas faire ça", mais qui ne rend pas le fait qu'il peut arriver disparaître.<?=
avec<? echo
. de nombreux éditeurs de texte peut facilement manipuler le faire pour des milliers de fichiers à la fois.Suivant est le merveilleux diagramme de flux de la même:
Source: semblable question sur l'Ingénierie du Logiciel Stack Exchange
<?
les balises courtes mentionnés dans la question (même si elle a utilisé le même paramètre de configuration pré-5.4)http://uk3.php.net/manual/en/language.basic-syntax.phpmode.php a beaucoup de conseils, y compris:
et
et
Au cas où quelqu'un est toujours attention à ce... depuis PHP 5.4.0 Alpha 1
<?=
est toujours disponible:http://php.net/releases/NEWS_5_4_0_alpha1.txt
De sorte qu'il ressemble à court balises sont (a) acceptable et (b) de rester ici. Du moins pour le moment...
<?=
n'est pas considéré comme une balise courte que de 5,4Les balises courtes ne sont pas activés par défaut dans certaines des serveurs (des hôtes, etc.), donc la portabilité du code devient un problème si vous avez besoin de se déplacer à l'un de ces.
Lisibilité peut être un problème pour certains. De nombreux développeurs peuvent trouver que
<?php
attire l'œil comme un plus évident marqueur au début d'un bloc de code que<?
lorsque vous lisez un fichier, en particulier si vous êtes coincé avec une base de code avec HTML et PHP étroitement entrelacées.<?= $var ?>
est beaucoup plus lisible que<?php echo $var ?>
<?
vs<?php
.Note: depuis PHP 5.4 la balise courte,
<?=
, est maintenant toujours disponible.J'ai lu cette page, après avoir cherché des informations sur le sujet, et j'ai le sentiment qu'un problème majeur n'a pas été mentionné: la paresse contre l'uniformité. Le "réel" des balises pour PHP <?php et ?>. Pourquoi? Je n'ai pas vraiment de soins. Pourquoi voudriez-vous d'utiliser autre chose lorsque ceux-ci sont clairement pour PHP? <% et %> moyenne de l'AEP pour moi, et <script ..... moyens Javascript (dans la plupart des cas). Donc, par souci de cohérence, d'apprentissage rapide, la portabilité et la simplicité, pourquoi ne pas coller à la norme?
D'autre part je suis d'accord que les balises courtes dans les modèles (et SEULEMENT dans les modèles) semblent utiles, mais le problème est que nous avons passé trop de temps à discuter ici, qu'il serait susceptible de prendre un temps très long d'avoir gaspillé beaucoup de temps à taper les trois personnages de "php"!!
Tout en ayant de nombreuses options, c'est sympa, c'est pas du tout logique et il peut causer des problèmes. Imaginez si chaque langage de programmation a permis à 4 ou plusieurs types de balises: le Javascript n' <JS ou < script .... ou <% ou <? JS.... serait-ce utile? Dans le cas de PHP l'analyse de l'ordre tend à être en faveur de permettre à ces choses, mais la langue est dans de nombreux autres moyens ne sont pas flexibles: il jette des avis ou des erreurs sur la moindre incohérence, mais les balises courtes sont souvent utilisés. Et quand le court-étiquettes sont utilisées sur un serveur qui ne prend pas en charge, il peut prendre un temps très long à comprendre ce qui est faux puisque aucune erreur n'est donné dans certains cas.
Enfin, je ne pense pas que les balises courtes sont le problème ici: il y a seulement deux types de logique de blocs de code PHP-- 1) régulière code PHP, 2) le modèle de l'écho.
Pour le premier, je crois fermement que seul <?php et ?> devrait être autorisé juste pour garder tout cohérent et portable.
Pour ce dernier, le <?=$var?> la méthode est laid. Pourquoi doit-il être comme ça? Pourquoi ne pas ajouter quelque chose de beaucoup plus logique?
<?php $var ?>
Que ne ferait rien du tout (et seulement dans les plus lointaines pourrait-il en conflit avec quelque chose), et qui pourraient facilement remplacer le maladroit <?= la syntaxe. Ou si c'est un problème, peut-être qu'ils pourraient utiliser <?php=$var?> à la place, et vous inquiétez pas sur les incohérences.
Au point où il y a 4 options pour ouvrir et fermer les balises et le hasard en outre d'un "echo" de la balise, PHP peut aussi bien avoir un "custom ouvrir/fermer les balises" drapeau en php.ini ou .htaccess. De cette façon, les concepteurs peuvent choisir celui qu'ils aiment le mieux. Mais pour des raisons évidentes que overkill. Alors pourquoi autoriser 4+ options?
Il est bon de les utiliser lorsque vous travaillez avec un framework MVC ou CMS qui ont séparé les fichiers de vue.
C'est rapide, moins de code, pas de confusion pour les concepteurs. Juste assurez-vous que la configuration de votre serveur permet de les utiliser.
Une situation qui est un peu différent, c'est lors de l'élaboration d'un CodeIgniter application. CodeIgniter semble utiliser le shorttags chaque fois que PHP est utilisé dans un modèle/vue, sinon avec des modèles et des contrôleurs, il utilise toujours le long des balises. Il n'est pas difficile et rapidement la règle dans le cadre, mais pour la plupart, le cadre et beaucoup de la source à partir d'autres utilisations suivantes de la présente convention.
Mes deux cents? Si vous n'envisagez pas sur l'exécution du code quelque part d'autre, puis utilisez-les si vous le souhaitez. Je préfère ne pas avoir à faire un énorme de recherche et de remplacement lorsque je réalise que c'était une idée stupide.
Avouons-le. PHP est laid comme l'enfer sans les balises courtes.
Vous pouvez les activer dans un
.htaccess
fichier si vous ne pouvez pas obtenir à laphp.ini
:<?
est désactivé par défaut dans les versions récentes. Vous pouvez activer cette comme décrit L'activation des Balises Courtes en PHP.À mon humble avis, les gens qui utilisent les balises courtes oublie souvent de s'échapper de tout ce qu'ils sont l'écho. Il serait agréable d'avoir un moteur de template qui s'échappe par défaut. Je crois que Rob Un a écrit un petit hack pour échapper balises courtes dans Zend Frameworks d'applications. Si vous aimez les balises courtes car il fait de PHP plus facile à lire. Alors peut-être Smarty être une meilleure option?
pour moi que c'est mieux que
On doit se demander quel est le point de l'utilisation de balises courtes est.
Plus rapide de type
MDCore dit:
Oui, il est. Vous évitera d'avoir à taper 7 caractères * X fois tout au long de vos scripts.
Toutefois, lorsqu'un script prend une heure ou 10 heures, ou plus, de concevoir, de développer et d'écrire, de façon pertinente, c'est quelques secondes de temps de ne pas taper les 7 caractères, ici et là, pour la durée de l'exécution du script?
Par rapport au potentiel de certains ou de tous, de vous les scripts ne fonctionnent pas si les balises courtes ne sont pas activés, ou sont sur mais une mise à jour ou quelqu'un de changer le fichier ini/server config arrêts de travail, d'autres potentiels.
La petite que vous gagnez n'est pas proche de contrebalancer la gravité des problèmes potentiels, c'est votre site ne fonctionne pas, ou pire, seulement des parties de ne pas de travail et donc un casse-tête à résoudre.
Plus facile à lire
Cela dépend familiarité.
Je l'ai toujours vu et utilisé
<?php echo
. Ainsi, alors que<?=
n'est pas difficile à lire, il n'est pas familier pour moi et donc pas plus facile à lire.Et avec front-end/back-end developer split (comme avec la plupart des sociétés) serait un développeur front-end à travailler sur ces modèles de plus familier sachant
<?=
est égal à "PHP balise d'ouverture et d'écho"?Je dirais que la plupart seraient plus à l'aise avec la plus logique. C'est, d'une manière claire PHP balise d'ouverture et puis ce qui se passe "echo" -
<?php echo
.De l'évaluation des risques
Question = ensemble du site ou de base de scripts ne fonctionnent pas;
Le potentiel de la question est très faible + gravité des conséquences est très haute = risque élevé
Conclusion
Vous permettre d'économiser quelques secondes ici et là de ne pas avoir à taper quelques caractères, mais le risque de beaucoup pour elle, et aussi probablement perdre la lisibilité comme un résultat.
Avant ou à l'arrière de la fin des codeurs familier avec
<?=
sont plus susceptibles de comprendre<?php echo
, comme ils sont standard PHP choses - standard<?php
balise d'ouverture et la très connue "echo".(Même avant la fin de codeurs savoir "echo" ou tout simplement l'habitude de travailler sur un code servi par un cadre).
Alors que l'inverse n'est pas probable, quelqu'un n'est pas susceptible d'logiquement en déduire que le signe égal sur un PHP balise courte est "echo".
<?=
va lire<?=
plus facilement qu'une personne a utilisé pour la lecture<?php echo
lecture<?php echo
.<?php
de voir que tout au long de code plusieurs fois est plus familier pour moi que<?=
- familiarité rend les choses plus faciles - tho pas forcément mieux.<?=
va lire<?=
de mieux qu'une personne a utilisé pour la lecture<?php echo
lire<?php echo
. Cela signifie que si nous avons deux copies identiques de la personne X, et de les modifier seulement dans l'aspect à laquelle on s'est habitué à la lecture<?=
, et l'autre qui est utilisé pour la lecture<?php echo
, La première copie peut atteindre la lisibilité de la valeur dex
lors de la lecture à l'aide de la syntaxe, tandis que le deuxième peut atteindre la lisibilité de la valeur dey
lors de la lecture de la syntaxe, oùx >= y
.Pour éviter des problèmes de portabilité, début des balises PHP avec
<?php
et dans le cas où votre fichier PHP est purement PHP, HTML non, vous n'avez pas besoin d'utiliser les balises de fermeture.Avec cela dit, un ami m'a dit cela, à l'appui de l'alternance normalisé asp-les balises de style, comme
<%
plutôt que<?
, qui est un paramètre de php.ini appelé asp_tags. Voici son raisonnement:Sonne bien pour moi, mais je ne crois pas qu'aucun de nous ne peut les chariots en cercle autour de cette cause. En attendant, je m'en tiendrais à la pleine
<?php
.Convertir
<?
(sans espace arrière) pour<?php
(avec un espace arrière):Convertir
<?
(avec un espace arrière) pour<?php
(tout en conservant l'espace de fin):J'ai pensé qu'il vaut la peine de mentionner qu'à partir de PHP 7:
<% … %>
sont allés<? … ?>
sont toujours disponibles sishort_open_tag
est définie sur true. C'est la valeur par défaut.<?=… ?>
sont toujours activé, quel que soit leshort_open_tag
réglage.Bon débarras pour la première, comme il a interféré avec d'autres langues.
Il y a maintenant plus aucune raison de ne pas utiliser le court de l'impression des balises, à l'exception de préférence personnelle.
Bien sûr, si vous écrivez du code pour être compatible avec d'anciennes versions de PHP 5, vous aurez besoin d'un bâton pour les anciennes règles, mais n'oubliez pas que quoi que ce soit avant de PHP 5.6 est maintenant pris en charge.
Voir: https://secure.php.net/manual/en/language.basic-syntax.phptags.php
Si vous vous souciez de XSS alors vous devriez utiliser
<?= htmlspecialchars(…) ?>
la plupart du temps, donc une balise courte ne pas faire une grande différence.Même si vous réduisez
echo htmlspecialchars()
àh()
, c'est encore un problème que vous devez n'oubliez pas d'ajouter presque à chaque fois (et en essayant de garder une trace de laquelle des données est pré-spécifiés, ce qui est sans échappement mais inoffensif seulement fait des erreurs plus probable).- Je utiliser un moteur de template qui est sécurisé par défaut et écrit
<?php
balises pour moi.<?php ?>
sont beaucoup mieux à utiliser car les développeurs de ce langage de programmation a massivement mis à jour leur base de langue. Vous pouvez voir la différence entre les balises courtes et longues balises.Les balises courtes seront mis en évidence que la lumière rouge, tandis que les plus longues sont mises en évidence plus sombre!
Cependant, en écho à quelque chose, par exemple:
<?=$variable;?>
est très bien. Mais préférez le plus de balises.<?php echo $variable;?>
Balise courte sont alwayes disponible en php.
Donc pas besoin de vous faire l'écho de la première instruction dans votre script
exemple:
Soudain, vous avez besoin d'utiliser un seul script php alors u peut
l'utiliser.
exemple:
Pas, et ils sont éliminés par PHP 6 donc, si vous appréciez le code de la longévité, il suffit de ne pas les utiliser ou les
<% ... %>
balises.