Para responder directamente a su pregunta: nunca haga eco de texto estático o HTML. Deja eso fuera de tu PHP.
<?php echo "<p>Hello World</p>"; // Alway wrong. ?>
<p>Hello World</p> <!-- Does the same thing, faster, and is more readable. -->
Escapar a PHP es un desperdicio si todo lo que vas a hacer es pasar texto estático o html estático. Todo el código dentro de <?php ?>
se envía a PHP para ser interpretado. Esto significa que su sitio web es más lento y está desperdiciando electricidad si pasa grandes cantidades de texto estático a PHP sin ningún motivo. (A veces hay una razón).
La mejor práctica es hacer que su lógica y gruñido trabajen en archivos sin HTML, solo PHP.
La forma en que me gusta hacer esto es con un marco MVC. Tengo PHP puro en los modelos y controladores, y una mezcla de HTML y PHP en las vistas. No necesita un marco MVC; simplemente podría pegar su mezcla de HTML en archivos de plantilla, que luego incluirá en sus archivos PHP puros.
Una vez que haya creado sus variables (que no incluyen HTML en ellas) en archivos PHP puros, puede pasarlas al archivo con su HTML. Allí, y solo allí, está bien mezclar HTML y PHP. Pero, y esto es importante, pero cuando trabaje con archivos que tienen HTML, mantenga el PHP al mínimo.
Afortunadamente, PHP viene con herramientas amigables para hacer que PHP sea más fácil de leer cuando se mezcla con html.
Sintaxis Alternativa
La mejor práctica es usar la sintaxis PHP normal al escribir PHP puro, pero la sintaxis alternativa, al mezclar PHP y HTML.
En archivos PHP normales sin HTML:
if ($something) {
do_something(); // do_something() shouldn't echo or print.
}
Esto es hermoso para PHP puro, pero no es ideal cuando se escapa de HTML. En particular, las llaves de cierre a menudo son difíciles de entender cuando aparecen en grandes pilas de HTML.
Parece, en base a su pregunta que habría escrito, en un archivo que combina HTML y PHP, esto:
<?php
if ($something) {
echo '<p>Hello World.</p>';
}
?>
Por los motivos descritos anteriormente, queremos que el HTML no se envíe a PHP. Hacemos esto así:
<?php if ($something) { ?>
<p>Hello World.</p>
<?php } ?>
Sacamos nuestro HTML de nuestras etiquetas PHP, lo cual es una mejora. Pero podríamos ir más allá.
¿Te das cuenta de lo poco informativo que es el corchete de cierre? No sabemos si está cerrando un ciclo o una declaración if. Esto parece trivial en el ejemplo anterior, pero a menudo hay docenas de líneas de HTML dentro de if / endif dentro de un bucle / endloop.
La mejor práctica es que en un archivo que mezcla PHP y HTML, utilice la sintaxis alternativa, que omite abrir y cerrar llaves ( { }
):
<?php if ($something): ?>
<p>Hello world.</p>
<?php endif; ?>
Además de la semántica de la nueva sintaxis ( :
y en endif;
lugar de {
y }
), debe notar dos cosas:
- Nuevamente, el HTML y el texto, aunque controlados por PHP, están fuera de las
<?php ?>
etiquetas, por lo que no se interpretan. Por las razones descritas anteriormente, esto es bueno.
- Esto es mucho más informativo que si se tratara de php incluyendo llaves de cierre aleatorias (
<?php } ?>
) cerrando cosas que son difíciles de encontrar donde se abrieron (porque están mezcladas con un montón de HTML desordenado). De nuevo, imagine un gran archivo HTML con bucles y sentencias if. Especificar lo que está cerrando puede aclarar mucho.
La misma sintaxis amigable con la plantilla se puede usar también para bucles:
<?php foreach ($things as $thing): ?>
<li><?php echo $thing; ?></li>
<?php endforeach; ?>
Etiquetas cortas
Otra gran herramienta proporcionada por PHP que, una vez más, solo desea usar al mezclar PHP y HTML, son las etiquetas cortas. Es posible que deba activar etiquetas cortas en el archivo php.ini. Una vez activadas, las etiquetas cortas hacen que todo sea aún más legible.
Sin etiquetas cortas, tiene que escribir, <?php echo $something; ?>
pero con etiquetas cortas puede escribir <?=$something?>
y tendrá exactamente el mismo resultado.
Al combinar etiquetas cortas y la sintaxis alternativa de PHP, realmente puede escribir algunos archivos HTML elegantes, que incluyen elementos PHP. Tomando nuestro último ejemplo de bucle (solo la parte dentro del bucle), las etiquetas cortas nos permiten reducir:
<li><?php echo $thing; ?></li>
a
<li><?=$thing?></li>
lo cual es mucho más legible.
¿Podríamos ir más lejos? Sí. Usando varios sistemas de plantillas puede hacer cosas como:
<li>{thing}</li>
Lo cual es asombrosamente legible. Sin embargo, los sistemas de plantillas están muy fuera del alcance de la pregunta original (que dejé hace un tiempo de todos modos).