engine - ¿Por qué casi todos los framework PHP usan "<? Php echo...?>"
template engine php (8)
- La etiqueta corta de PHP
<?= $var ?>
Ha quedado en desuso por un tiempo. - Casi todos los marcos de PHP usan la forma larga
<?php echo $var ?>
(Por ejemplo, sinfonía , Yii , Kohana ) - Smarty es un famoso motor de plantillas PHP que admite una forma más corta
{$var}
- Los motores de plantillas (como Smarty ) son más fáciles para el diseñador web
- La edición de una plantilla muestra
{$var}
lugar de mostrar nada (debido a<..>
) - Sintaxis más corta (menos tipeo especialmente cuando
<>
están en la misma tecla en algunos diseños de teclado) - Las plantillas se compilan previamente y se almacenan en caché, dando casi las mismas prestaciones
- La edición de una plantilla muestra
Todos esos puntos hacen que me pregunte, ¿por qué todo el framework parece usar la sintaxis súper larga de PHP? ¿Existe un punto fuerte de no usar un motor de plantillas como Smarty (excepto la pequeña sobrecarga)?
Además de las otras respuestas, hay un par de cosas que hacen que Smarty (y los motores de plantillas similares) sean problemáticos.
La primera es que necesita escapar de algunos caracteres en su plantilla si va a poner javascript en ella. Si su javascript es creado dinámicamente por PHP, empeora aún más; la legibilidad de ese código disminuye drásticamente.
El segundo y más importante es que cuando trabajas en un marco OO decente, Smarty reducirá severamente la funcionalidad de tu código. Al usar PHP como motor de plantilla, puede usar $ this dentro de su plantilla para llamar a los métodos en el controlador que está analizando la plantilla. No solo eso, sino que tienes acceso a todos los métodos que el controlador ha heredado. Con Smarty, se pierde toda esta funcionalidad porque $ this ya no se refiere a su controlador. En esencia, en lugar de acceder a su marco completo desde su plantilla, solo tiene acceso a la funcionalidad limitada de Smarty.
Esto es lo que tiene que decir Fabien Potencier del framework Symfony sobre la creación de plantillas de motores :
¿Por qué la gente todavía piensa que PHP es un motor de plantillas? Efectivamente, PHP comenzó su vida como un lenguaje de plantilla, pero no evolucionó como uno en los últimos años. Si cree que PHP todavía es un lenguaje de plantilla, ¿puede darme un cambio reciente en el lenguaje PHP que mejoró PHP como lenguaje de plantilla? No puedo pensar en uno.
También describe las características que busca en un lenguaje de plantillas:
- Corte
- Sintaxis orientada a la plantilla
- Reusabilidad
- Seguridad
- Modo sandbox
Además de algunas de las características que hacen que Twig destaque su lenguaje de plantillas favorito:
- Herencia de plantilla nativa (las plantillas se compilan como clases);
- Sólido automático de escapes automáticos (sin sobrecarga de tiempo de ejecución asociado ya que todo se hace durante la compilación);
- Modo de espacio aislado muy seguro (lista blanca de las etiquetas, filtros y métodos que se pueden usar en las plantillas);
- Gran extensibilidad: anula todo, incluso las características principales, agrupando sus propias etiquetas y filtros como una extensión; pero también puede manipular el AST (Árbol de sintaxis abstracta) antes de la compilación. Aprovechando estas posibilidades, incluso puede crear su propio DSL (lenguaje específico del dominio), dirigido a su aplicación.
En los comentarios del artículo, dice que, "Probablemente será parte de Symfony 2. Pero primero necesito comentarios de la comunidad".
Lea el artículo completo para obtener su argumento completo a favor de los sistemas de plantillas.
Las etiquetas abiertas cortas no están en desuso y tampoco se eliminarán en PHP6.
- [PHP-DEV] Lanzar un E_DEPRECATED para short_open_tag
- [PHP-DEV] Asunto: ¿Es cierto que short_open_tag está en desuso en PHP 6?
- [PHP-DEV] short_open_tag
- Solicitud de comentarios: etiquetas cortas mejoradas para plantillas
Los artículos vinculados también contienen mucha información útil sobre el tema.
Citando a Rasmus Lerdorf (3er enlace):
La mayoría de los argumentos que he visto básicamente dicen
<?
es malo y ni siquiera debería existir, pero esa no es la pregunta actual. Sí existe, y no lo estamos eliminando, por lo que el único argumento real aquí es el factor WTF introducido por el código que puede activar o desactivar estas etiquetas sobre la marcha. Ese es el único argumento válido que he visto. Si el código PHP puede o no ser validado con xmllint y si o no<?
es válido xml, que obviamente no lo es, está completamente al lado del punto. Todos sabemos que cuando usas<?
usted no es compatible con XML. Y para la gran mayoría está bien. [...]Mi opinión es que la gente quiere crear plantillas. Por mucho que odie el concepto, y siempre he sido muy elocuente al respecto, la gente quiere etiquetas de plantillas más simples. Incluso irán tan lejos como analizar archivos y generar código PHP en cada solicitud para poder usar
{blah}
lugar de<?php blah() ?>
. El hecho de que las personas estén dispuestas a asumir un rendimiento de orden de magnitud alcanzado por el azúcar sintáctico es desconcertante para mí, pero basta con observar todos los sistemas de plantillas que existen. Y sí, sé que hay otras razones para usar plantillas, como restringir el conjunto de funciones para escritores de plantillas que no son de confianza, etc. pero te sorprendería saber cuántas personas simplemente quieren escribir menos y que sus etiquetas sean más bonitas. Conseguir que estas personas cambien a<?blah()?>
Es una ganancia para el rendimiento y la cordura en mi libro. Sí, no es una victoria completa, pero sigue siendo una victoria.
Personalmente, trato de evitar los sistemas de plantillas ya que encuentro que la sintaxis regular de PHP es mucho más fácil de usar como un lenguaje de plantillas que reinventa lo que PHP puede hacer de la caja. Con la adición de ViewHelpers, cualquier diseñador no debería tener demasiados problemas para usar la sintaxis regular. En realidad, siempre encontré el argumento: los motores de plantillas (como Smarty ) son más fáciles de descifrar para el diseñador web . La sintaxis de PHP detallado puede no ser atractivo estéticamente, pero cualquier medio cerebro puede aprenderlo.
Lo que pasa con PHP es que ya es un lenguaje de plantillas.
Smarty, tan bueno como es, se agrega por encima. Si no tiene una buena razón para usarlo, ¿por qué lo haría? Las personas que usan frameworks de back-end son desarrolladores que ya están familiarizados con PHP, por lo que no hay razón para hacer que usen un motor de plantillas con una nueva sintaxis para aprender sobre él.
La mayoría de los marcos son lo suficientemente flexibles como para agregar un motor de plantillas no requiere mucho trabajo. Si se construyera un marco que lo obligara a usar Smarty, entonces sería menos popular, porque el marco en sí mismo sería menos flexible.
Con respecto a la "sintaxis larga", ningún marco va a colgar su sombrero en una sintaxis obsoleta con problemas de seguridad. Puede dejarse en manos del usuario del framework si quiere usarlo o no (lo que nadie debería hacer en estos días), pero construir un framework central alrededor de las etiquetas cortas lo hace menos portátil.
Los motores de plantillas como Smarty agregan una capa adicional de procesamiento que no es necesaria, son en su mayoría bloatware. Por lo general, agregan demasiado procesamiento adicional por lo que equivale a azúcar sintáctico. Usar un motor de plantillas cuando las etiquetas PHP están disponibles es como usar grilletes: se convierte en otro idioma con sus propias peculiaridades para aprender a fin de lograr lo mismo con PHP normal.
En mi experiencia, rara vez he visto a un programador no completo o fácil de utilizar un motor de plantilla. Toma estas dos instancias:
Sabelotodo:
<select>
{foreach from=$k item=v}
<option value="{$v.value|escape:''html''}">{$v.label|escape:''html''}</option>
{/foreach}
</select>
PHP:
<select>
<?php foreach ($k as $v) { ?>
<option value="<?php echo htmlentities($v[''value'']); ?>"><?php echo htmlentities($v[''label'']); ?></option>
<?php } ?>
</select>
Ahora, la sintaxis de Smarty puede ser un poco más clara, pero, sinceramente, ¿alguien, excepto un programador, podrá trabajar con cualquiera de los códigos establecidos cómodamente? Los motores de plantillas agregan una capa adicional de procesamiento / lógica sin ofrecer ningún beneficio importante.
No sé si llamaría a <?php print $foo; ?>
<?php print $foo; ?>
"sintaxis súper larga".
El hecho es que las etiquetas cortas no siempre están habilitadas en los servidores, mientras que el estándar predeterminado suele ser. Es más seguro ir por esa ruta.
Porque no quieren incluir una biblioteca tan grande como Smarty para hacer que sus plantillas sean más cortas.
Hay algunas razones:
- Deben dejar de estar disponibles en futuras versiones de php debido a problemas de seguridad.
- Algunos hosts los deshabilitan.
Más:
¿Son aceptables las etiquetas cortas de PHP?
No se recomiendan porque es un PITA si alguna vez tiene que mover su código a un servidor donde no es compatible (y no puede habilitarlo). Como dices, muchos hosts compartidos admiten etiquetas cortas, pero "muchos" no son todos. Si desea compartir sus secuencias de comandos, es mejor utilizar la sintaxis completa.
Estoy de acuerdo que
No compro la legibilidad como una razón en absoluto. Los desarrolladores más serios tienen la opción de resaltar la sintaxis disponible para ellos.
Más