Me he encontrado con esta etiqueta PHP <?= ?>
recientemente y soy reacio a usarla, pero pica tanto que quería tener tu opinión sobre ella. Sé que es una mala práctica usar etiquetas cortas <? ?>
y que deberíamos usar etiquetas completas <?php ?>
, pero ¿qué pasa con esta <?= ?>
:?
Ahorraría algo de tipeo y sería mejor para la legibilidad del código, IMO. Entonces, en lugar de esto:
<input name="someVar" value="<?php echo $someVar; ?>">
Podría escribirlo así, que es más limpio:
<input name="someVar" value="<?= $someVar ?>">
¿Usar este operador está mal visto?
echo
conduce muy fácilmente a XSS, y debería confiar mejor en el método de eco dedicado al contexto (es decir, tener unfunction html($x) { echo htmlentities($x,...); }
y un enhtml($someVar);
lugar deecho $someVar
o usarloecho json_encode($x);
para el contexto JS). Esto hace que las<?=
etiquetas sean una mala práctica porque significa que se ha escapado HTML del contenido de la variable en otro lugar, y por lo que ese otro lugar debe saber mágicamente que esta variable tiene que ser escapado HTML porque se repite en el contexto HTML.Respuestas:
Historia
Antes de que el tren de información errónea salga demasiado de la estación, hay un montón de cosas que debe comprender sobre las etiquetas cortas de PHP.
El problema principal con las etiquetas cortas de PHP es que PHP logró elegir una etiqueta (
<?
) que fue utilizada por otra sintaxis, XML .Con la opción habilitada, no pudo generar la salida sin formato de la declaración xml sin obtener errores de sintaxis:
Este es un gran problema cuando considera cuán común es el análisis y la administración de XML.
¿Qué hay de
<?=
?Aunque
<?
causa conflictos con xml,<?=
no lo hace . Desafortunadamente, las opciones para activarlo y desactivarlo estaban vinculadasshort_open_tag
, lo que significaba que para obtener el beneficio de la etiqueta de eco corta (<?=
), tenía que lidiar con los problemas de la etiqueta abierta corta (<?
). Los problemas asociados con la etiqueta abierta corta fueron mucho mayores que los beneficios de la etiqueta de eco corta, por lo que encontrará un millón y medio de recomendaciones parashort_open_tag
desactivar, lo que debe hacer .Con PHP 5.4, sin embargo, la etiqueta de eco corta se ha vuelto a habilitar por separado de la
short_open_tag
opción. Veo esto como un respaldo directo de la conveniencia de<?=
, ya que no hay nada fundamentalmente malo en ello en sí mismo.El problema es que no puede garantizar que tendrá
<?=
si está intentando escribir código que podría funcionar en una gama más amplia de versiones de PHP.ok, ahora que todo eso está fuera del camino
Deberías usar
<?=
?fuente
<?=
en el futuro se puede arreglar en menos de un minuto, no importa cuántos miles de archivos usan, que acaba de hacer una búsqueda en todo el proyecto y reemplazar de<?=
para<?php echo
. Mi respuesta es no te preocupes y solo úsala , los beneficios superan en gran medida las consecuencias.<?=
ya no se considera una etiqueta corta, el mismo Rasmus Lerdorf lo hizo muy comprometido.<?=
siempre estará encendido ( stackoverflow.com/a/6064813/156257 ) y la mayoría de las veces solía estar encendido. Puede demostrar que estoy equivocado al consultar con su host si: están deshabilitados y usan PHP <5.3 y si no permiten que los usuarios anulen la configuración o si la solicitan de manera especial; Si todo lo anterior es falso, no hay de qué preocuparse<?=
.<?=
se eliminen, y yo tampoco. Otros podrían estarlo, y si lo están, no tienen que usarlo<?=
. Algunas personas tienen miedo irracional de usar ciertas características del lenguaje ( como dejar etiquetas de cierre en php ).Desempolvando mi sombrero PHP
Definitivamente preferiría el uso de
<?= $someVar ?>
los más detalladosecho
(simplemente preferencias personales). El único inconveniente de AFAIK es para los usuarios que ejecutan versiones anteriores a la 5.4.0, en cuyo casoshort_open_tag
deben estar habilitados en php.ini .Ahora dicho esto, si su proyecto no es SO, entonces es un punto discutible. Si es así, documentaría el hecho de que
short_open_tag
s debe estar habilitado o usaría la más portátil de las dos soluciones.fuente
<?=
no lo afectashort_open_tag
, lo<?
sigue siendo y si tiene la costumbre de usar etiquetas de formato corto, es bastante fácil olvidar qué es compatible con qué versión.<?=
como "Estoy enviando una variable ahora" para uso de estilo de plantilla y<?php
como "Estoy ejecutando mucho código ahora". Sugeriría nunca usar<?
, pero eso<?=
y ambos<?php
están bien.Definitivamente, debe intentar evitar las etiquetas de formato corto, ya sea
<?
o no<?=
.La razón técnica principal es la portabilidad, nunca puede estar seguro de que las etiquetas de formato corto funcionarán para cada configuración, ya que se pueden desactivar, busque la
short_open_tag
directiva. Pero siempre puede estar absolutamente seguro de que la forma larga funcionará en todas partes.Eso también es un mal hábito. Realmente no puedo decirte qué encuentras más legible, pero estoy febrilmente en contra de usar la legibilidad del código como una excusa para ahorrarte un par de pulsaciones de teclas. Si le preocupa la legibilidad, debe optar por un motor de plantillas, esto:
es mucho más legible de sus dos ejemplos.
Por último, vale la pena señalar que las etiquetas de formato corto son desalentadas explícitamente por los principales proyectos de PHP, por ejemplo, PEAR y Zend Framework .
fuente
<?php
y, enecho
lugar de<?
y<?=
, ¿lo considera como un tiempo serio? ¿Y qué sucede cuando mueve su proyecto a un servidor donde, por alguna razón, las etiquetas cortas están deshabilitadas?La documentación de PHP dice claramente que puede usar etiquetas de eco cortas de forma segura:
5.4.0 The tag <?= is always available regardless of the short_open_tag ini setting.
Aunque esto es para PHP versión 5.4 y superior, pero al menos todos deberían usar este. Los preferiría solo con fines de plantilla.
fuente
Razones para usar etiquetas cortas:
Razones para no usar etiquetas cortas:
fuente
Creo que la
<?=
versión es una práctica buena / aceptable, siempre que solo la use para la salida final de variables y evite cualquier llamada a funciones o lógica ternaria que no esté directamente relacionada con la presentación de los datos.Ciertamente es mucho mejor que en
<? echo($x); ?>
todas partes.A largo plazo, es posible que desee buscar motores de plantillas como Smarty .
fuente
A partir de PHP 7.4, el campo de juego cambia un poco:
<? ?>
está oficialmente en desuso y se eliminará en PHP 8.0.PHP RFC: desaprobar PHP Las etiquetas abiertas cortas indican explícitamente que
<?= ?>
no se ve afectado. Esto indicaría (según yo, no el RFC) que no se desaconseja su uso.fuente
Para ser honesto, creo que hacer eco de un resultado cualquiera que sea el método (antiguo o nuevo) es algo bastante obsoleto mientras MVC celebra 33 años.
Diría que sí, esta es una buena práctica encapsular los datos entrantes del servidor (php) dentro de un documento XML y procesarlos en su capa aplicativa / cliente, lo que le ahorra incluso la idea de usar dicha etiqueta.
fuente