viernes, 5 de octubre de 2007

¡documentos a mi! ...

En PHP cuando quieres crear una cadena a partir de lo contenido en distintas variables, a menudo usas la concatenación de estas mismas. Por ejemplo, si quisiéramos obtener el nombre completo de una persona a partir de su(s) nombre(s) y apellidos, podríamos hacerlo usando espacios intermedios de la siguiente forma:
$nom_completo = $nombre." ".$apellido_paterno." ".$apellido_materno;

Como se puede ver es algo tedioso, pero esto no para ahí, si además, quisieramos hacer uso de comillas dobles (") o sencillas (') de manera indiscriminada y sin escaparlas quizá para general código HTML o funciones JavaScript que sólo cambia pequeñas secciones, entonces, perderse se vuelve algo trivial ...

Para estos casos, que suelen ser frecuentes, los masters recomiendan usar la codificación HEREDOC, que se podría traducir como traer el documento tal cual al lugar deseado.

Un pequeño ejemplo sería:

<?php
$variables = "VaRiAbLeS";
$body = <<< BODY
esta cadena se imprimir&aacute; sin problemas,
y podemos usar en ellas '"'comillas"' "'sin necesidad'
de escape;
Tambien interpreta (expande) las $$variables
Lo que es ideal para incluir grandes trozos de código html.

.oO(hasta aquí)
BODY;
echo $body;
?>

Observa los "<<<" y la etiqueta BODY (que podría ser cualquier palabra) al inicio(inmediatamente antes de un enter) y al final(justo después de otro enter), obteniendo como resultado en nuestro navegador algo parecido lo siguiente (viendo el código fuente):

esta cadena se imprimirá sin problemas,
y podemos usar en ellas '"'comillas"' "'sin necesidad'
de escape;
Tambien interpreta (expande) las $VaRiAbLeS
Lo que es ideal para incluir grandes trozos de código html.

.oO(hasta aquí)

Una descripción más detallada de cómo funcionan y cómo usarlas la pueden revisar en Heredoc a fondo.

Quizá sea bueno terminar el ejemplo del principio a:
$nom_completo = <<< NOMBRE
$nombre $apellido_paterno $apellido_materno
NOMBRE;

5 comentarios:

freeze dijo...

te falta comentar que para que funcione, antes del identificador final no pueden haber espacios ni tabuladores

Oscar Islas L. dijo...

eso quiere decir que debe estar al principio de la línea. Gracias Saúl...

Aunque, bueno, la idea practicamente era mostrar que existía una opción así de "picuda", porque la neta ya me fastidió estar concatenando muchas cadenas y escapando las comillas ;)

Oscar Islas L. dijo...

Saúl, ahora que me he peleado con la notación HEREDOC, la verdad es que debí poner más atención a tu comentario, y lo hice :) pero que crees?

si pones espacios o tabuladores después del primer identificador tampoco funciona :( lo peor es que me llevó buena parte del día encontrar dicho "error", de no haber sido que seleccioné todo el texto no me hubiera percatado de que justo después del identificador estaban unos espacios en blanco haciéndome la maldad.

Habrá que tomarlo en cuenta para otra ocasión :$

freeze dijo...

orale, eso si no lo sabía, bueno es que no me eh metido mucho con php, como que la web ya no es lo mío

Saúl dijo...

por cierto, para futuros "post" puedes usar SyntaxHighlighter, hace tiempo publiqué en mi blo' como hacerlo funcionar en blogger:
http://buglog-saul.blogspot.com/2008/03/usando-syntaxhighlighter-en-blogger.html

saludos Oscarín