Nov
11
2011

Heredocs in PHP, what are they?Heredocs en PHP, ¿qué son?

Heredocs in PHP, what are they?

We have already seen two kinds of strings in our previous posts. These are the simple ones, single quoted, and double quoted strings. We saw how to define the strings, and have them placed into a variable, for later displaying. How about if we have a very long string, that eventually will need all these quotation marks and a lot more other stuff. Here is where heredocs come in, and are very useful.

At a certain point, I had read about this subject, while reading one of my PHP books. I never really gave it much attention, since I asked myself, why would anyone use this, if it is easier to just use single or double quotes? I was wrong, but I didn’t notice till someone asked for help on this matter. I saw that the person using heredoc, was placing a huge amount of string, that included HTML tags, their attributes, and some PHP variables to go with it. Once I saw that this person was having a problem and needed help, I felt the need to read up on this subject again. I just didn’t know how it was called, so it took me a few minutes to get the subject.

How to declare heredocs

There are a few ways to declare a heredoc. Let’s create a string named $message with the token called msg.

[php]
$message = << This is a block
that contains the whole
string without having
any quote problems.
MSG;
?>
[/php]

Note that we started the heredoc with a token msg. This token has three (less than signs) in front of it. We also finish the heredoc with this same token. These tokens are arbitrary, and you just need to make sure, that this token does not appear within your block of string. Also, the token name can be anything you wish. I would recommend you make them relevant to what you are writing, just to be on the safe side. One thing to ‘NEVER FORGET’ is, when writing the closing token, it MUST NOT contain any characters before or after it, not even a SPACE. This will cause an error to be displayed to your screen, and saying it is in one line, when it really isn’t. You will break your head trying to figure out what the error is.
The above example is very simple, and it is equivalent to:

[php]
$message = 'This is a block
that contains the whole
string without having
any quote problems.'
?>
[/php]

So what are these heredocs good for? These heredocs are great when it comes to long strings such as a sql statement, or even an email string that you would like to send through the mail() function. Observe a simple sql statement:
[php]
$sql = << SELECT userid, name, date, address, gender, dob, status
FROM user_table
WHERE user_status = $user_status
AND user_age > {$array['allowd_age']}
ORDER BY user_status ASC;
SQL;
?>
[/php]

As you see, you can use variables inside the string statement. To call these variables, you just type it in normally. In order to get the value of a certain sport in an associative array, then you can do it like you see above, with the open and close curly brace.

For an email message containing HTML in it, you can do it as follows:

[php]
// EMD = email message data
$email_msg = <<

Thank you for registering with us

Dear $username,

We would like to thank you for using our website, and registering it.
The following is a link, for you to confirm your email. $link
Please confirm your email with the link above.

Thank you once again,
Jotorres Team!



EMD;
?>
[/php]

The above is an email message sent to the user when that user registered on the website.

The following is a table of escaped characters that you can use within a heredoc statement.
This table is from php.net:http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double

Escaped characters
Sequence Meaning
\n linefeed (LF or 0x0A (10) in ASCII)
\r carriage return (CR or 0x0D (13) in ASCII)
\t horizontal tab (HT or 0×09 (9) in ASCII)
\v vertical tab (VT or 0x0B (11) in ASCII) (since PHP 5.2.5)
\f form feed (FF or 0x0C (12) in ASCII) (since PHP 5.2.5)
\\ backslash
\$ dollar sign
\” double-quote
\[0-7]{1,3} the sequence of characters matching the regular expression is a
character in octal notation
\x[0-9A-Fa-f]{1,2} the sequence of characters matching the regular expression is a
character in hexadecimal notation

Hope you all Enjoyed!Heredocs en PHP, ¿qué son?

Ya hemos visto dos tipos de cadenas(‘strings’) en nuestros posts anteriores. Estas son las que son hechas con comillas simples y comillas dobles. Hemos visto cómo definir las cadenas(‘strings’), y las han colocado en una variable, para su posterior visualización. ¿Qué tal si tenemos una cadena(‘string’) muy larga, que que a su vez necesiten comillas u otras cosas que tal vez puedan ser confusas. Aquí es donde entran en heredocs, y son muy útiles.

En un momento determinado, yo había leído sobre este tema, al leer uno de mis libros de PHP. Yo nunca le dí mucha importancia, ya que me pregunté, ¿por qué iba alguien a usar esto, si es más fácil usar comillas simples o dobles? Yo estaba equivocado, pero no me di cuenta hasta que alguien pidió ayuda con este asunto. Vi que la persona que utiliza heredoc, colocaba una cantidad enorme de cadena, que incluye etiquetas HTML, sus atributos, y algunas variables de PHP. Una vez vi que esta persona tenía un problema y necesitaba ayuda, me sentí la necesidad de leer sobre este tema de nuevo. Yo no sabía cómo se llamaba, así que me tomó unos minutos para obtener su nombre.

Cómo declarar heredocs

Hay varias formas de declarar un heredoc. Vamos a crear una cadena denominada $mensaje con una ficha llamado msg.

[php]
$mensaje = << Este es un bloque
que contiene el conjunto
de palabras sin tener
ningún problema.
MSG;
?>
[/php]

Tenga en cuenta que empezamos el heredoc con una ficha llamado msg. Esta ficha tiene tres (signo menor que) en frente de ella. A su vez, el heredoc se termina con la misma. Estas fichas son arbitrarias, y sólo tienes que asegurarte de que este símbolo no aparezca en el bloque de la cadena. Además, el nombre de la ficha puede ser cualquier cosa que usted desee. Te recomiendo que sea pertinente a lo que está escrito, sólo para estar en el lado seguro. Una cosa que “NUNCA DEBES OLVIDAR’ es, al escribir la ficha de cierre, no debe contener ningún carácter ni antes, ni después de ella, ni tan siquiera un espacio. Esto provocará un error que se mostrará en la pantalla y diciendo que está en una línea, cuando en realidad no lo es. Te vas a romper la cabeza tratando de averiguar cuál es el error.
El ejemplo anterior es muy simple, y es equivalente a:

[php]
$mensaje = 'Este es un bloque
que contiene el conjunto
de palabras sin tener
ningún problema.'
?>
[/php]

¿Para que sirven estos heredocs? Estos heredocs son bueno cuando se trata de cadenas largas como una declaración SQL, o incluso una cadena de correo electrónico que desea enviar a través de la función mail () de PHP. Veamos una simple declaración SQL:
[php]
$sql = << SELECT userid, name, date, address, gender, dob, status
FROM user_table
WHERE user_status = $user_status
AND user_age > {$array['allowd_age']}
ORDER BY user_status ASC;
SQL;
?>
[/php]

Como puede ver, se pueden usar variables dentro de la oración de cadena. Para llamar a estas variables, solo tienes que invoarcla, como normalmente lo harías. Con el fin de obtener el valor de un deporte determinado en una matriz asociativa, entonces usted debe hacerlo como se ve arriba, con el corchete de apertura y cierre.

Para un mensaje de correo electrónico con HTML, puede hacerlo de la siguiente manera:

[php]
// EMD = email message data
$email_msg = <<

Gracias por registrarse con nosotros.

Querido $username,

Nos gustaría darle las gracias por navegar nuestra página web, y registrarse.
El siguiente es un enlace, para que usted confirme su correo electrónico. $ link
Por favor confirme su correo electrónico con el enlace de arriba.

Una vez mas, gracias,
Equipo Jotorres!



EMD;
?>
[/php]

Lo anterior es un mensaje de correo electrónico enviado al usuario cuando el usuario se registra en una página web.

La siguiente es una tabla de caracteres de escape que se pueden utilizar dentro de una oración heredoc.
Esta tabla es de php.net:http://www.php.net/manual/es/language.types.string.php#language.types.string.syntax.double

Caracteres escapados
Sentencia Significado
\n avance de línea (LF o 0x0A (10) en ASCII)
\r retorno de carro (CR o 0x0D (13) en ASCII)
\t tabulador horizontal (HT o 0×09 (9) en ASCII)
\v tabulador vertical (VT o 0x0B (11) en ASCII) (desde PHP 5.2.5)
\f avance de página (FF o 0x0C (12) en ASCII) (desde PHP 5.2.5)
\\ barra invertida
\$ signo del dólar
\” comillas dobles
\[0-7]{1,3} la secuencia de caracteres que coincida con la expresión regular
es un caracter en notación octal
\x[0-9A-Fa-f]{1,2} la secuencia de caracteres que coincida con la expresión regular
es un caracter en notación hexadecimal

Esperamos que todos hayan disfrutado!

1 Comment+ Add Comment

  • Everything between the heredoc tags will be output, and the variable will echo it’s value.

Leave a comment