Lección: Heredoc y Nowdoc
La sintaxis heredoc (y más tarde nowdoc) te permite volcar grandes cantidades de texto, como HTML o mensajes largos, sin preocuparte por escapar comillas o caracteres especiales. Es ideal para mejorar la legibilidad y velocidad de tus scripts.
Heredoc: Texto con expansión de variables
Heredoc te permite escribir texto que incluye comillas, variables, y saltos de línea sin necesidad de escapar caracteres. Se define con <<<
seguido de un identificador (por convención, EOT
o EOF
), el texto, y el identificador de cierre:
<?php
declare(strict_types=1);
$nombre = "Juan";
echo <<<EOT
Esta cadena se imprime sin problemas,
y podemos usar "comillas" sin escaparlas.
Hola, $nombre, bienvenido!
Es ideal para grandes trozos de HTML.
EOT;
?>
Salida:
Esta cadena se imprime sin problemas,
y podemos usar "comillas" sin escaparlas.
Hola, Juan, bienvenido!
Es ideal para grandes trozos de HTML.
Nota: El identificador puede ser cualquier
combinación de letras, números, o caracteres (por ejemplo,
TEXTO
, ABC123
), siempre que no aparezca en el
texto. - Usa constantes para identificadores comunes:
<?php
const HEREDOC_ID = 'EOT';
echo <<<EOT
Texto con identificador constante.
EOT;
?>
- La clave es que heredoc expande variables (
$nombre
) y expresiones complejas (por ejemplo,{$array['key']}
). - El identificador de cierre debe estar al inicio de la línea, sin
espacios, tabuladores, ni comentarios, seguido solo por un punto y coma
(
;
).
Nowdoc: Texto sin expansión
Nowdoc es como heredoc, pero no interpreta variables ni expresiones,
ideal para código literal (por ejemplo, plantillas o SQL). Usa comillas
simples en el identificador (<<<'EOT'
):
<?php
declare(strict_types=1);
$nombre = "Juan";
echo <<<'EOT'
Esta cadena no expande $nombre.
Perfecto para código literal, como "plantillas".
EOT;
?>
Salida:
Esta cadena no expande $nombre.
Perfecto para código literal, como "plantillas".
Reglas importantes
- Identificador de cierre: Debe estar solo en su línea, sin espacios ni caracteres adicionales (excepto
;
). - Compatibilidad>: Los editores modernos y clientes FTP (como FileZilla) manejan correctamente los finales de línea (
\n
). Usa modo de transferencia ASCII si trabajas con servidores antiguos. - Expresiones en heredoc: Soporta variables complejas:
<?php
$datos = ['nombre' => 'Ana'];
echo <<<EOT
Hola, {$datos['nombre']}!
EOT;
?>
- Casting: Fuerza el tipo de variables para seguridad:
<?php
$edad = 25; // De una fuente externa
echo <<<EOT
Edad: {(int)$edad} años
EOT;
?>
Comparación: Heredoc, Nowdoc, y comillas dobles
Característica | Heredoc | Nowdoc | Comillas dobles |
---|---|---|---|
Expande variables | Sí | No | Sí |
Soporta expresiones | Sí ({$var} ) |
No | Sí ({$var} ) |
Ideal para | HTML, texto largo | Código literal | Cadenas cortas |
Escapar comillas | No necesario | No necesario | Necesario |
Legibilidad multilineal | Excelente | Excelente | Pobre |
Ejemplo con comillas dobles (menos legible):
<?php
$usuario = "María";
echo "<h1>Hola, $usuario</h1>\n<p>Bienvenida</p>";
?>
Ventajas de heredoc y nowdoc
- Legibilidad: Fácil de escribir y leer, especialmente para HTML o texto largo.
- Velocidad: Reduce operaciones de concatenación, mejorando el rendimiento.
- Flexibilidad: Heredoc para texto dinámico, nowdoc para texto estático.
¿Por qué usar {$var}
en HEREDOC?
Aunque en la mayoría de los casos puedes usar variables directamente ($nombre
, $edad
), encerrar la variable entre llaves {}
aporta claridad y funcionalidad extra:
- Evita ambigüedades cuando añades texto justo después de la variable:
$nombre = "Lucía";
echo "Hola $nombreMundo"; // Incorrecto: busca $nombreMundo
echo "Hola {$nombre}Mundo"; // Correcto: imprime "Hola LucíaMundo"
- Permite acceder a arrays, objetos o caracteres de forma mas clara:
$persona = ["nombre" => "Ana"];
echo "Hola {$persona['nombre']}";
- Acepta expresiones simples:
$edad = 25;
echo "En 5 años tendrás {$edad + 5} años.";
Usa {$var}
cuando necesites precisión, claridad o para acceder a estructuras complejas. En casos simples, $var
es suficiente.