Voici les informations selon la documentation officielle :
Il existe quatre paires différentes de balises d'ouverture et de fermeture qui peuvent être utilisées en PHP. Deux d'entre eux,
<?php ?>
et<script language="php"> </script>
, sont toujours disponibles. Les deux autres sont des balises courtes et des balises de style ASP, et peuvent être activées et désactivées à partir du fichier de configuration php.ini. En tant que tel, bien que certaines personnes trouvent les balises courtes et les balises de style ASP pratiques, elles sont moins portables et généralement déconseillées .
Dans mon expérience , la plupart des serveurs ne sont des balises courtes activées. Dactylographie
<?=
est beaucoup plus pratique que de taper
<?php echo
La commodité des programmeurs est un facteur important, alors pourquoi ne sont-ils pas recommandés?
la source
why
, je citerais le guide de certification Zend PHP 5: "Les balises courtes étaient, pendant un certain temps, la norme dans le monde PHP; cependant, elles ont l'inconvénient majeur d'être en conflit avec les en-têtes XML et, par conséquent, ont quelque peu tombé au bord du chemin. "<?= $example;?>
! Ceci est très important car l'utilisation de toutes les autres balises courtes est considérée comme futile. Quoi qu'il en soit, l'utilisation de la balise d'écho courte est désormais encouragée. Il fournit une base de code plus fluide et plus ordonnée - esp. dans les fichiers de vue. Donc pour PHP> = 5.4.0<?= ?>
peut être utilisé sans réglageshort_open_tag
. Veuillez ne pas utiliser les autres balises courtes dans votre code. Les codes-dieux deviennent très en colère quand vous le faites ...<?
n'est pas seulement utilisé en XML pour la<?xml version="1.0" ?>
déclaration d' ouverture ; c'est la syntaxe générale des "instructions de traitement", le 2ème exemple le plus courant étant<?xml-stylesheet ... ?>
.<?php
peut en fait être considéré comme une instruction de traitement valide, comme c'est le cas<?=
(comme autorisé dans 5.4+), mais revendiquer l'ensemble<?
crée également un conflit inutile entre les syntaxes.Réponses:
Ils ne sont pas recommandés car il s'agit d'un PITA si vous devez déplacer votre code vers un serveur où il n'est pas pris en charge (et vous ne pouvez pas l'activer). Comme vous le dites, de nombreux hôtes partagés prennent en charge les raccourcis, mais «lots» ne sont pas tous. Si vous souhaitez partager vos scripts, il est préférable d'utiliser la syntaxe complète.
Je suis d'accord avec cela
<?
et<?=
sont plus faciles pour les programmeurs que<?php
et<?php echo
mais il est possible de faire une recherche et un remplacement en bloc tant que vous utilisez le même formulaire à chaque fois (et ne jetez pas dans les espaces (par exemple:<? php
ou<? =
)Je n'achète pas du tout la lisibilité comme raison. La plupart des développeurs sérieux ont la possibilité de mettre en évidence la syntaxe.
Comme ThiefMaster le mentionne dans les commentaires, depuis PHP 5.4, les
<?= ... ?>
balises sont prises en charge partout, quels que soient les paramètres des raccourcis . Cela devrait signifier qu'ils sont sûrs à utiliser dans du code portable, mais cela signifie qu'il y a alors une dépendance à PHP 5.4+. Si vous souhaitez prendre en charge la version antérieure à 5.4 et ne pouvez pas garantir les raccourcis, vous devrez toujours utiliser<?php echo ... ?>
.De plus, vous devez savoir que les balises ASP <%,%>, <% = et la balise de script sont supprimées de PHP 7 . Donc, si vous souhaitez prendre en charge du code portable à long terme et que vous souhaitez passer aux outils les plus modernes, envisagez de modifier ces parties de code.
la source
J'aime trop le
<?=$whatever?>
laisser partir. Je n'ai jamais eu de problème avec ça. J'attendrai que ça me mord dans le cul. Sérieusement, 85% de (mes) clients ont accès à php.ini dans les rares cas où ils sont désactivés. Les 15% restants utilisent des hébergeurs traditionnels, et pratiquement tous les ont activés. Je les aime.la source
À partir de PHP 5.4, le raccourci d'écho est un problème distinct des balises courtes, car le raccourci d'écho sera toujours activé. C'est un fait maintenant:
Ainsi, le raccourci d'écho lui-même (
<?=
) est sûr à utiliser maintenant.la source
<?php
peut être utilisé au début de tous les fichiers de classe, puis vous avez<?=
pour vos vues. gagnant-gagnant.So the echo shortcut itself (<?=) is safe to use
... tant que vous êtes à l'aise avec PHP 5.4. Les applications PHP largement distribuées (comme wordpress) n'ont pas le luxe d'exiger la version 5.4, et ont même continué à offrir une prise en charge de PHP 4 jusqu'en 2011, soit 7 ans après la sortie de PHP 5. Si vous êtes dans un endroit comme Facebook, où toutes les installations de votre logiciel sont directement exploitées par l'entreprise elle-même, alors nécessiter une assistance 5.4 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 template. Personne ne fait valoir que les balises devraient être utilisées dans les fichiers source de l'application.
Cependant, la syntaxe intégrable de PHP permet de l'utiliser comme un langage de modèle puissant, et les modèles doivent être aussi simples et lisibles que possible. Beaucoup ont trouvé plus facile d'utiliser un moteur de création de modèles beaucoup plus lent, comme Smarty, mais pour les puristes parmi nous qui exigent un rendu rapide et une base de code pure, PHP est le seul moyen d'écrire des modèles.
Le SEUL argument valable CONTRE l'utilisation de balises courtes est qu'elles ne sont pas prises en charge sur tous les serveurs. Les commentaires sur les conflits avec les documents XML sont ridicules, car vous ne devriez probablement pas mélanger PHP et XML de toute façon; et si vous l'êtes, vous devriez utiliser PHP pour sortir des chaînes de texte. La sécurité ne devrait jamais être un problème, car si vous placez des informations sensibles comme les informations d'identification d'accès à la base de données dans des fichiers de modèle, eh bien, vous avez de plus gros problèmes!
Maintenant, en ce qui concerne la question de la prise en charge des serveurs, il faut certes être conscient de leur plateforme cible. Si l'hébergement partagé est une cible probable, les balises courtes doivent être évitées. Mais pour de nombreux développeurs professionnels (comme moi), le client reconnaît (et en effet, cela dépend du fait) que nous dicterons les exigences du serveur. Souvent, je suis responsable de la configuration du serveur moi-même.
Et nous ne travaillons JAMAIS avec un hébergeur qui ne nous donne pas le contrôle absolu de la configuration du serveur - dans un tel cas, nous pourrions compter sur des problèmes bien plus importants que de simplement perdre le support des balises courtes. Cela n'arrive tout simplement pas.
Alors oui - je conviens que l'utilisation de balises courtes doit être soigneusement pesée. Mais je crois aussi fermement que cela devrait TOUJOURS être une option, et qu'un développeur qui connaît son environnement devrait se sentir libre de les utiliser.
la source
<?
comme balise courte, car cela conduit à des solutions de contournement moches sur XML. Cela dit, je conviens qu'il s'agit de peser les avantages et les inconvénients, et que si vous savez ce que vous faites, vous pouvez certainement le faire. Mais cela ne fait pas<?
un bon choix.Les balises courtes reviennent grâce à Zend Framework poussant le " PHP comme langage de modèle " dans leur configuration MVC par défaut . Je ne vois pas de quoi parle le débat, la plupart des logiciels que vous produirez au cours de votre vie fonctionneront sur un serveur que vous ou votre entreprise contrôlerez. Tant que vous restez cohérent, il ne devrait y avoir aucun problème.
MISE À JOUR
Après avoir fait pas mal de travail avec Magento , qui utilise une forme longue. En conséquence, je suis passé à la forme longue de:
plus de
On dirait une petite quantité de travail pour assurer l'interopérabilité.
la source
Parce que la confusion qu'il peut générer avec des déclarations XML. Cependant, beaucoup de gens sont d' accord avec vous.
Une préoccupation supplémentaire est la douleur que cela engendrerait pour tout coder avec des balises courtes pour découvrir à la fin que le serveur d'hébergement final les a désactivés ...
la source
<?='<?xml'
) ou en disant «vous ne devriez pas faire ça» mais cela ne fait pas disparaître le fait que cela peut arriver.<?=
par<? echo
. de nombreux éditeurs de texte peuvent facilement gérer cela sur des milliers de fichiers à la fois.Voici le magnifique organigramme du même:
Source: question similaire sur Software Engineering Stack Exchange
la source
<?
balises courtes mentionnées dans la question (bien qu'elle ait utilisé le même paramètre de configuration avant la 5.4)http://uk3.php.net/manual/en/language.basic-syntax.phpmode.php contient de nombreux conseils, notamment:
et
et
la source
Au cas où quelqu'un y prêterait encore attention ... Depuis PHP 5.4.0, Alpha 1
<?=
est toujours disponible:http://php.net/releases/NEWS_5_4_0_alpha1.txt
Il semble donc que les balises courtes soient (a) acceptables et (b) ici pour rester. Pour l'instant au moins ...
la source
<?=
n'est pas considéré comme une balise courte en date du 5.4Les balises courtes ne sont pas activées par défaut sur certains serveurs Web (hôtes partagés, etc.), donc la portabilité du code devient un problème si vous devez passer à l'un d'entre eux.
La lisibilité peut être un problème pour certains. De nombreux développeurs peuvent trouver que cela
<?php
attire l'attention comme un marqueur plus évident du début d'un bloc de code que<?
lorsque vous analysez un fichier, en particulier si vous êtes coincé avec une base de code avec HTML et PHP étroitement imbriqués.la source
<?= $var ?>
est beaucoup plus lisible que<?php echo $var ?>
<?
vs<?php
.Remarque: à partir de PHP 5.4, la balise courte,,
<?=
est désormais toujours disponible.la source
J'ai lu cette page après avoir cherché des informations sur le sujet, et je pense qu'un problème majeur n'a pas été mentionné: la paresse vs la cohérence. Les "vraies" balises pour PHP sont <? Php et?>. Pourquoi? Je m'en fiche vraiment. Pourquoi voudriez-vous utiliser autre chose alors que ceux-ci sont clairement pour PHP? <% et%> signifie ASP pour moi, et <script ..... signifie Javascript (dans la plupart des cas). Donc, pour la cohérence, l'apprentissage rapide, la portabilité et la simplicité, pourquoi ne pas vous en tenir à la norme?
D'un autre côté, je conviens que les balises courtes dans les modèles (et UNIQUEMENT dans les modèles) semblent utiles, mais le problème est que nous venons de passer tellement de temps à en discuter ici, qu'il faudrait probablement beaucoup de temps pour avoir réellement gaspillé autant de temps à taper les trois caractères supplémentaires de "php" !!
Bien qu'avoir de nombreuses options soit agréable, ce n'est pas du tout logique et cela peut causer des problèmes. Imaginez si chaque langage de programmation autorisait 4 types de balises ou plus: Javascript pourrait être <JS ou <script .... ou <% ou <? JS .... serait-ce utile? Dans le cas de PHP, l'ordre d'analyse a tendance à être favorable à ces choses, mais le langage n'est pas flexible à bien d'autres égards: il émet des avis ou des erreurs sur la moindre incohérence, mais des balises courtes sont souvent utilisées. Et lorsque des balises courtes sont utilisées sur un serveur qui ne les prend pas en charge, cela peut prendre très longtemps pour comprendre ce qui ne va pas, car aucune erreur n'est donnée dans certains cas.
Enfin, je ne pense pas que les balises courtes soient le problème ici: il n'y a que deux types logiques de blocs de code PHP - 1) du code PHP normal, 2) des échos de modèle. Pour les premiers, je crois fermement que seuls <? Php et?> Devraient être autorisés juste pour garder tout cohérent et portable. Pour ce dernier, la méthode <? = $ Var?> Est moche. Pourquoi doit-il en être ainsi? Pourquoi ne pas ajouter quelque chose de beaucoup plus logique? <? php $ var?> Cela ne ferait rien (et ce n'est que dans les possibilités les plus éloignées que cela pourrait entrer en conflit avec quelque chose), et cela pourrait facilement remplacer la syntaxe maladroite <? =. Ou si c'est un problème, ils pourraient peut-être utiliser <? Php = $ var?> À la place et ne pas se soucier des incohérences.
Au moment où il existe 4 options pour les balises d'ouverture et de fermeture et l'ajout aléatoire d'une balise spéciale "echo", PHP peut également avoir un indicateur "balises d'ouverture / fermeture personnalisées" dans php.ini ou .htaccess. De cette façon, les concepteurs peuvent choisir celui qu'ils préfèrent. Mais pour des raisons évidentes, c'est exagéré. Alors pourquoi autoriser 4+ options?
la source
Il est bon de les utiliser lorsque vous travaillez avec un framework MVC ou un CMS qui ont des fichiers d'affichage séparés.
C'est rapide, moins de code, pas déroutant pour les concepteurs. Assurez-vous simplement que la configuration de votre serveur permet de les utiliser.
la source
Une situation un peu différente est lors du développement d'une application CodeIgniter . CodeIgniter semble utiliser les raccourcis chaque fois que PHP est utilisé dans un modèle / vue, sinon avec les modèles et les contrôleurs, il utilise toujours les longues balises. Ce n'est pas une règle stricte et rapide dans le cadre, mais pour la plupart, le cadre et une grande partie de la source provenant d'autres utilisations suivent cette convention.
Mes deux centimes? Si vous ne prévoyez jamais d'exécuter le code ailleurs, utilisez-les si vous le souhaitez. Je préfère ne pas avoir à faire une recherche massive et à remplacer quand je me rends compte que c'était une idée stupide.
la source
<?
est désactivé par défaut dans les versions plus récentes. Vous pouvez activer ceci comme décrit l' activation des balises courtes en PHP .la source
Les personnes à mon humble avis qui utilisent des balises courtes oublient souvent d'échapper à tout ce dont elles font écho. Ce serait bien d'avoir un moteur de template qui s'échappe par défaut. Je crois que Rob A a écrit un petit hack pour échapper aux balises courtes dans les applications Zend Frameworks. Si vous aimez les balises courtes car cela rend PHP plus facile à lire. Alors Smarty pourrait-il être une meilleure option?
pour moi ça a l'air mieux que
la source
Il faut se demander quel est l'intérêt d'utiliser des balises courtes.
Saisie plus rapide
MDCore a déclaré:
Oui, ça l'est. Vous économisez d'avoir à taper 7 caractères * X fois tout au long de vos scripts.
Cependant, lorsqu'un script prend une heure, ou 10 heures, ou plus, pour concevoir, développer et écrire, quelle est la pertinence des quelques secondes de temps à ne pas taper ces 7 caractères ici et là pendant la durée du script?
Comparé au potentiel de certains ou de tous vos scripts ne fonctionnant pas si les balises courtes ne sont pas activées ou sont activées, mais une mise à jour ou une modification de la configuration du fichier / serveur ini les empêche de fonctionner, d'autres potentiels.
Le petit avantage que vous gagnez ne dépasse pas la gravité des problèmes potentiels, c'est-à-dire que votre site ne fonctionne pas, ou pire, que certaines parties ne fonctionnent pas et donc un mal de tête à résoudre.
Plus facile à lire
Cela dépend de la familiarité .
J'ai toujours vu et utilisé
<?php echo
. Donc, même si ce<?=
n'est pas difficile à lire, ce n'est pas familier pour moi et donc pas plus facile à lire .Et avec la répartition des développeurs front-end / back-end (comme avec la plupart des entreprises), un développeur front-end travaillant sur ces modèles serait-il plus familier en sachant que
<?=
c'est égal à "PHP open tag and echo"?Je dirais que la plupart seraient plus à l'aise avec la plus logique. Autrement dit, une balise ouverte PHP claire et ensuite ce qui se passe "echo" -
<?php echo
.Évaluation des risques
Problème = le site entier ou les scripts principaux ne fonctionnent pas;
Le potentiel du problème est très faible + la gravité du résultat est très élevée = risque élevé
Conclusion
Vous économisez quelques secondes ici et là sans avoir à taper quelques caractères, mais vous risquez beaucoup pour cela, et vous perdrez probablement la lisibilité en conséquence.
Avant ou dorsaux codeurs familiers avec
<?=
sont plus susceptibles de comprendre<?php echo
, car ils sont des choses standards PHP - standard<?php
étiquette ouverte et très bien connus « écho ».(Même les codeurs frontaux devraient connaître "echo" ou ils ne travailleront tout simplement pas sur n'importe quel code servi par un framework).
Alors que l'inverse n'est pas aussi probable, quelqu'un n'est pas susceptible de déduire logiquement que le signe égal sur une balise PHP courte est "echo".
la source
<?=
lira<?=
plus facilement qu'une personne habituée à<?php echo
lire<?php echo
.<?php
voir que le code est souvent plus familier dans le code que<?=
- la familiarité facilite les choses - mais pas nécessairement mieux.<?=
lira<?=
mieux qu'une personne habituée à<?php echo
lire<?php echo
. Cela signifie que si nous avons deux copies identiques de la personne X, et que nous ne les modifions que dans l'aspect par lequel l'une est habituée à la lecture<?=
et l'autre qui est habituée à la lecture<?php echo
, la première copie peut atteindre la valeur de lisibilité de lax
lecture en utilisant la syntaxe souhaitée, tandis que la deuxième copie peut atteindre la valeur de lisibilité dey
lors de la lecture de sa syntaxe souhaitée, oùx >= y
.Avouons-le. PHP est moche comme l'enfer sans balises courtes.
Vous pouvez les activer dans un
.htaccess
fichier si vous ne pouvez pas accéder àphp.ini
:la source
Pour éviter les problèmes de portabilité, démarrez les balises PHP avec
<?php
et si votre fichier PHP est purement PHP, pas de HTML, vous n'avez pas besoin d'utiliser les balises de fermeture.la source
Cela dit, un de mes amis a dit cela, à l'appui d'une alternative normalisée balises de style asp , comme
<%
plutôt que<?
, qui est un paramètre dans php.ini appelé asp_tags. Voici son raisonnement:Cela me semble bien, mais je pense qu'aucun d'entre nous ne peut contourner les wagons autour de cette cause. En attendant, je m'en tiendrai au maximum
<?php
.la source
J'ai pensé qu'il valait la peine de mentionner qu'à partir de PHP 7:
<% … %>
ont disparu<? … ?>
sont toujours disponibles sishort_open_tag
est défini sur true. C'est la valeur par défaut.<?=… ?>
sont toujours activées, quel que soit leshort_open_tag
paramètre.Bon débarras du premier, car il interférait avec d'autres langues.
Il n'y a maintenant aucune raison de ne pas utiliser les balises d'impression courtes, en dehors de vos préférences personnelles.
Bien sûr, si vous écrivez du code pour être compatible avec les anciennes versions de PHP 5, vous devrez vous en tenir aux anciennes règles, mais rappelez-vous que tout ce qui précède PHP 5.6 n'est plus pris en charge.
Voir: https://secure.php.net/manual/en/language.basic-syntax.phptags.php
la source
Si vous vous souciez de XSS, vous devez utiliser
<?= htmlspecialchars(…) ?>
plupart du temps, donc une balise courte ne fait pas une grande différence.Même si vous raccourcissez
echo htmlspecialchars()
àh()
, il est encore un problème que vous devez vous rappeler d'ajouter presque à chaque fois (et en essayant de garder une trace des données qui est pré-échappé, ce qui est, mais non échappés Inoffensif ne fait que des erreurs plus probable).J'utilise un moteur de modèles sécurisé par défaut et écrit des
<?php
balises pour moi.la source
<?php ?>
sont beaucoup mieux à utiliser puisque les développeurs de ce langage de programmation ont massivement mis à jour leur langage principal. Vous pouvez voir la différence entre les balises courtes et les balises longues.Les étiquettes courtes seront surlignées en rouge clair tandis que les plus longues seront surlignées plus foncées!
Cependant, faire écho à quelque chose, par exemple:
<?=$variable;?>
c'est bien. Mais préférez les balises plus longues.<?php echo $variable;?>
la source
Convertir
<?
(sans espace de fin) en<?php
(avec un espace de fin):Convertir
<?
(avec un espace de fin) en<?php
(en conservant l'espace de fin):la source
Les balises courtes sont toujours disponibles en php. Vous n'avez donc pas besoin d'écho de la première déclaration de votre script
exemple:
Soudain, vous devez utiliser un seul script php, puis vous pouvez l'utiliser. exemple:
la source
À partir de 2019, je ne suis pas d'accord avec certaines réponses ici. Je recommande d'utiliser de longues balises
ou balises d'écho courtes
Motif: Ils sont recommandés par la norme de codage de base PSR-1
D'autres balises courtes comme
<? /* code goes here */ ?>
ne sont pas recommandées.La spécification dit:
la source
3 balises sont disponibles en php:
<?php ?>
n'a pas besoin de directive de configuration<? ?>
disponible si l'option short_open_tag dans php.ini est activée<?=
depuis php 5.4.0, il est toujours disponiblede php 7.0.0 asp et la balise de script sont supprimés
la source
Non, et ils sont progressivement supprimés par PHP 6, donc si vous appréciez la longévité du code, ne les utilisez tout simplement pas ou les
<% ... %>
balises.la source