Cadenas

Cadenas

En PHP, las cadenas de texto se delimitan por comillas (dobles o simples).

<?php
print "<p>Esto es una cadena.</p>\n";
?>
<p>Esto es una cadena.</p>
<?php
print '<p>Esto es otra cadena.</p>';
?>
<p>Esto es otra cadena.</p>

Las cadenas contienen lógicamente caracteres del juego de caracteres en el que se guarde el archivo (UTF-8, CP-1252, ISO-8859-1, etc.), pero algunos caracteres necesitan un tratamiento especial, como se explica más adelante.


Si las comillas de apertura y cierre no son del mismo tipo (una de ellas doble y otra simple), se produce un error de sintaxis.

Incorrecto
<?php
print "<p>Esto es una cadena.</p>\n';
?>

Parse error: syntax error, unexpected end of file, expecting
variable (T_VARIABLE) or ${ (T_DOLLAR_OPEN_CURLY_BRACES)
or {$ (T_CURLY_OPEN) in ejemplo.php on line 3


Comillas dentro de cadenas

Si una cadena está delimitada por comillas dobles, en su interior puede haber cualquier número de comillas simples, y viceversa.

<?php
print "<p>Esto es una comilla simple: '</p>";
?>
<p>Esto es una comilla simple: '</p>
<?php
print '<p>Esto es una comilla doble: "</p>';
?>
<p>Esto es una comilla doble: "</p>

Lo que no puede haber en una cadena es una comilla del mismo tipo que las que delimitan la cadena.

Incorrecto
<?php
print "<p>Esto es una comilla doble: "</p>";
?>

Parse error: syntax error, unexpected '/' in ejemplo.php on line 2

Incorrecto
<?php
print '<p>Esto es una comilla simple: '</p>';
?>

Parse error: syntax error, unexpected '/' in ejemplo.php on line 2

Para poder escribir en una cadena una comilla del mismo tipo que las que delimitan la cadena, se debe utilizar los caracteres especiales \' o \".

<?php
print "<p>Esto es una comilla simple: ' y esto una comilla doble: \"</p>";
?>
<p>Esto es una comilla simple: ' y esto una comilla doble: "</p>
<?php
print '<p>Esto es una comilla simple: \' y esto una comilla doble: "</p>';
?>
<p>Esto es una comilla simple: ' y esto una comilla doble: "</p>

Y por supuesto se pueden utilizar los carateres especiales \' y \" con cualquier delimitador:

<?php
print "<p>Esto es una comilla simple: \' y esto una comilla doble: \"</p>";
?>
<p>Esto es una comilla simple: ' y esto una comilla doble: "</p>
<?php
print '<p>Esto es una comilla simple: \' y esto una comilla doble: \"</p>';
?>
<p>Esto es una comilla simple: ' y esto una comilla doble: "</p>

Pero los caracteres especiales \" y \' no se pueden utilizar para delimitar cadenas.

Incorrecto
<?php
print \"<p>Esto es una cadena.</p>\n\";
?>

Parse error: syntax error, unexpected '"', expecting identifier (T_STRING)
in ejemplo.php on line 2

Incorrecto
<?php
print \'<p>Esto es una cadena.</p>\n\';
?>

Parse error: syntax error, unexpected ''<p>Esto es una cadena.</p>\n\'
(T_CONSTANT_ENCAPSED_STRING), expecting identifier (T_STRING)
in ejemplo.php on line 2


Diferencias entre comillas simples y dobles

Aunque en los ejemplos anteriores las comillas simples o dobles son equivalentes, en otras situaciones no lo son. Por ejemplo, PHP no sustituye las variables que se encuentran dentro de cadenas delimitadas con comillas simples, mientras que sí que lo hace (pero no siempre) si se utilizan comillas dobles, como se ve en el siguiente ejemplo:

<?php
$cadena = "Hola";
print "<p>La variable contiene el valor: $cadena</p>";
?>
<p>La variable contiene el valor: Hola</p>
Desaconsejado
<?php
$cadena = "Hola";
print '<p>La variable contiene el valor: $cadena</p>';
?>
<p>La variable contiene el valor: $cadena</p>

PHP tampoco sustituye algunos caracteres especiales (por ejemplo, el salto de línea \n) dentro de las comillas simples, como se ve en el siguiente ejemplo:

<?php
print "<pre>Esto está en\ndos líneas.</pre>";
?>
<pre>Esto está en
dos líneas</pre>
Desaconsejado
<?php
print '<pre>Esto está en\ndos líneas.</pre>';
?>
<pre>Esto está en\ndos líneas</pre>

Comillas en código html / css

En el código HTML generado con PHP también se pueden escribir comillas simples o dobles. Los dos ejemplos siguientes producen código html válido:

<?php
print "<p><strong style='color: red;'>Hola</strong></p>";
?>
<p><strong style='color: red;'>Hola</strong></p>
<?php
print '<p><strong style="color: red;">Hola</strong></p>';
?>
<p><strong style="color: red;">Hola</strong></p>

En estos apuntes se delimitan las cadenas con comillas dobles. Si el código html / css generado contiene comillas, en estos apuntes se generan también comillas dobles, por lo que dentro de las cadenas se utiliza el carácter especial \". Únicamente en las consultas SQL (que se verán más adelante) se utilizan comillas simples dentro de las cadenas.

<?php
print "<p><strong style=\"color: red;\">Hola</strong></p>";
?>
<p><strong style="color: red;">Hola</strong></p>

Caracteres especiales

Por distintos motivos, algunos caracteres necesitan escribirse dentro de las cadenas de una forma especial. Por ejemplo, :

Para poder escribir estos caracteres en una cadena, en PHP existen los llamados caracteres especiales. Los caracteres especiales empiezan por el carácter contrabarra (\). Los caracteres especiales más utilizados son los siguientes:

Caracter Significado
\\ Carácter contrabarra
\$ Carácter dólar
\" Carácter comilla doble (en una cadena delimitada por comillas dobles)
\' Carácter comilla simple (en una cadena delimitada por comillas simples)
\n Salto de línea
\t Tabulador horizontal

Además, existen también estos caracteres especiales, menos utilizados que los anteriores:

Caracter Significado
\XXX Carácter de código XXX en octal
\xXX Carácter de código XX en hexadecimal
\r Retorno de carro
\v Tabulador vertical
\e Escape
\f Salto de página (en impresoras antiguas)

Los ejemplos anteriores se podrían escribir así:

<?php
print "<p>Los nombres de variables empiezan por $. Por ejemplo \$edad.</p>";
?>
<p>Los nombres de variables empiezan por $. Por ejemplo $edad.</p>
<?php
print "<p>Las cadenas se delimitan con comillas (\" o ').</p>";
?>
<p>Las cadenas se delimitan con comillas (" o ').</p>

Saltos de línea en el código fuente

Se pueden insertar saltos de línea en el código HTML de la página insertándolos directamente en el interior de las cadenas o mediante el carácter especial \n. Este salto de línea es ignorado por los navegadores, pero aumenta la legibilidad del código fuente.

Los ejemplos siguientes producen el mismo resultado en los navegadores (una lista de dos elementos), pero el código fuente es más legible en los tres últimos casos.

<?php
print "<ul><li>Uno</li><li>Dos</li></ul>\n";
?>
<ul><li>Uno</li><li>Dos</li></ul>
<?php
print "<ul>";
print "<li>Uno</li>";
print "<li>Dos</li>";
print "</ul>\n";
?>
<ul><li>Uno</li><li>Dos</li></ul>
<?php
print "<ul>\n  <li>Uno</li>\n  <li>Dos</li>\n</ul>\n";
?>
<ul>
  <li>Uno</li>
  <li>Dos</li>
</ul>
<?php
print "<ul>\n";
print "  <li>Uno</li>\n";
print "  <li>Dos</li>\n";
print "</ul>\n";
?>
<ul>
  <li>Uno</li>
  <li>Dos</li>
</ul>
<?php
print "<ul>
  <li>Uno</li>
  <li>Dos</li>
</ul>\n";
?>
<ul>
  <li>Uno</li>
  <li>Dos</li>
</ul>

Concatenar cadenas

El operador . (punto) permite concatenar dos o más cadenas.

<?php
print "<p>Pasa" ."tiempos</p>\n";
?>
<p>Pasatiempos</p>

El mismo resultado se puede conseguir sin utilizar el operador . (punto):

<?php
print "<p>Pasatiempos</p>\n";
?>
<p>Pasatiempos</p>

Trabajando únicamente con cadenas, el operador . (punto) no parece demasiado útil, pero en la lección dedicada a Variables se explica el uso del operador utilizando variables y cadenas, que es el uso más habitual.


El operador de asignación con concatenación (.=) permite concatenar una cadena a otra y asignarla a esta:

<?php
$cadena = "Pasa";
print "<p>$cadena</p>\n";
$cadena .= "tiempos";
print "<p>$cadena</p>\n";
?>
<p>Pasa</p>
<p>Pasatiempos</p>