Explicaciones generales sobre las cadenas en PHP. Cómo usar strings en PHP, buenas prácticas y trucos para mejorar el código con este tipo de datos.
Uno de los tipos de datos más corrientes en la mayoría de los lenguajes son los strings. También podremos conocerlas con el nombre de cadenas o "cadenas de caracteres". No son más que información que contiene texto, con caracteres alfanuméricos, cualquier mezcla de caracteres alfabéticos, símbolos y caracteres numéricos.
Por decirlo con otras palabras, en general, cuando guardamos cualquier texto en una variable, lo que estamos guardando técnicamente son cadenas o strings. Es un tipo de datos muy importante, ya que mucha de la información con la que tenemos que trabajar en las aplicaciones es texto.
Para asignar a una variable un contenido de tipo cadena, lo escribiremos entre comillas, valiendo tanto las comillas dobles como las comillas simples. En código da lugar a sentencias de este tipo:
$cadena="Esta es la información de mi variable de tipo string";
Si queremos mostrar en pantalla el valor de una variable o bien un mensaje cualquiera usaremos la instrucción echo como ya lo hemos visto en ejemplos diversos hasta el momento en el Manual de PHP:
echo $cadena; //sacaría "Esta es la información de mi variable"
A la sentencia echo le podemos pasar no solo una variable de tipo cadena, pues en realidad saca por pantalla cualquier cosa: Si no es una cadena hará lo que pueda para producir una salida adecuada. Incluso podemos pasarle un literal de cadena:
echo "Esta es la información de mi variable"; //daría el mismo resultado
Literales de cadena con comillas dobles o comillas simples
Algo característico de PHP es que permite usar tanto comillas simples como comillas dobles y, dependiendo de cómo lo hayamos hecho PHP interpretará las cadenas de manera distinta. Es algo que debemos de aprender cuanto antes al trabajar en PHP, porque si no, puede que nos de algunos problemas o surjan situaciones en las que el resultado de un programa no sea el que se esperaba.
Cadenas con comillas dobles
Si usamos comillas dobles para delimitar cadenas de PHP haremos que el lenguaje se comporte de una manera más "inteligente". Lo más destacado es que las variables que coloquemos dentro de las cadenas se sustituirán por los valores. Es mejor verlo con un código.
$sitioweb = "DesarrolloWeb";
$cadena = "Bienvenidos a $sitioweb";
echo $cadena;
Ese código producirá como salida "Bienvenidos a DesarrolloWeb". Es decir, PHP interpolará en la variable $cadena el valor de la variable $sitioweb, sustituyendo $sitioweb por su correspondiente valor: "DesarrolloWeb".
Dentro de las cadenas delimitadas por comillas dobles hay una gran cantidad de caracteres de escape, mediante los cuales podemos colocar en cadenas de caracteres cosas como saltos de línea, tabuladores o símbolos "$" que no serían considerados como inicio del nombre de una variable. Luego daremos más detalle sobre esto.
Cadenas con comillas simples
Cuando encierras un literal de cadena con comillas simples la cosa cambia bastante. Lo más destacable es que ninguna de tus variables se sustituirá por su valor. Puedes verlo en el siguiente código fuente:
$sitioweb = 'DesarrolloWeb';
$cadena = 'Bienvenidos a $sitioweb';
echo $cadena;
Este código fuente es prácticamente igual que el anterior, con la salvedad que estamos usando cadenas delimitadas por comillas simples. La salida es sensiblemente distinta, en este caso nos mostraría "Bienvenidos a $sitioweb", dado que no realiza la interpolación de la variable.
Como puedes ver, dentro de una cadena indicada con comillas simples no puedes insertar valores de variables de manera tan sencilla, sino que tendrías que romper la cadena y concatenar con la variable. En seguida hablaremos de cómo concatenar o unir cadenas, pero para que quede ya el ejemplo, para conseguir el resultado del script equivalente pero con comillas dobles, tendrías que escribir algo como esto:
$sitioweb = 'DesarrolloWeb';
$cadena = 'Bienvenidos a ' . $sitioweb;
echo $cadena;
¿Qué usar, comillas simples o dobles?
La respuesta es bien sencilla. Por lo general se recomienda usar comillas simples, puesto que a PHP le costará menos usarlas, dado que no intentará sustituir valores de variables dentro de ellas. Solo si quieres beneficiarte de las ventajas de la interpolación sencilla de variables sería recomendable usar las cadenas con comillas dobles, dado que generarás un código mucho más sencillo de leer por los humanos y de mantener durante la vida de la aplicación.
Concatenación de cadenas
Podemos yuxtaponer o concatenar varias cadenas utilizando el operador de concatenación de strings, que tiene el símbolo punto ".":
$cadena1="Perro";
$cadena2=" muerde";
$cadena3=$cadena1.$cadena2;
echo $cadena3; //El resultado es: "Perro muerde"
Aunque ya lo hemos dicho, usando comillas dobles podrías colocar esas variables dentro de nuestra cadena. Dejamos aquí otro ejemplo:
$a=55;
$mensaje="Tengo $a años";
echo $mensaje; //El resultado es: "Tengo 55 años"
La pregunta que nos podemos plantear ahora es... ¿Cómo hago entonces para que en vez del valor "55" me salga el texto "$a"? En otras palabras, cómo se hace para que el símbolo $ no defina una variable sino que sea tomado tal cual. Esta pregunta es tanto más interesante cuanto que en algunos de scripts este símbolo debe ser utilizado por una simple razón comercial (pago en dólares por ejemplo) y si lo escribimos tal cual, el ordenador va a pensar que lo que viene detrás es una variable siendo que no lo es.
Caracteres de escape
Para incluir el símbolo $, la contrabarra y otros caracteres utilizados por el lenguaje dentro de las cadenas y no confundirlos se usan los caracteres de escape.
Para insertar un caracter de escape tenemos que indicarlo comenzando con el símbolo de la contrabarra (barra invertida) y luego el del caracter de escape que deseemos usar.
Los caracteres de escape disponibles dependen del tipo de literal de cadena que estemos usando. En el caso de las cadenas con comillas dobles se permiten muchos más caracteres de escape. Los encuentras en la siguiente tabla:
Estos cambios de línea y tabulaciones tienen únicamente efecto en el código y no en el texto ejecutado por el navegador. En otras palabras, si queremos que nuestro texto ejecutado cambie de línea hemos de introducir un echo "<br>"
y no .
En el caso de las cadenas expresadas con comillas simples hay muchos menos caracteres de escape. Primero porque no son necesarios (como el símbolo $, que no puede ser confundido con el inicio de una variable, ya que no las tiene en cuenta) y segundo porque simplemente no se encuentran disponibles.
A continuación puedes ver la tabla de caracteres de escape permitidos en una cadena encerrada mediante comillas simples:
Sintaxis compleja de las llaves
Otra cosa útil que nos conviene aprender cuando trabajamos con cadenas es la posibilidad de interpolar valores complejos de variables un tanto especiales. En la documentación de PHP le llaman a esto la "sintaxis compleja", pero no conviene asustarse porque en realidad es bien simple.
Mira el siguiente código:
$array = array(1, 2, 40, 55);
$cadena = "La posición tres contiene el dato $array[2]";
echo $cadena; //escribe La posición tres contiene el dato 40
Aquí no surge ningún problema al expandir el valor de la posición 3 del array en la cadena, usando (eso sí) comillas dobles. Incluso aunque el array necesite un índice, PHP sabe que lo que tiene que mostrar ahí es una casilla del array. Pero ahora observa el siguiente código:
$array = array('uno' => 1, 'dos' => 2, 'tres' => 40, 'cuatro' => 55);
$cadena = "La posición 'tres' contiene el dato $array['tres']"; //esto produce un error!!
En este caso nuestro script producirá un error al ser interpretado por PHP, puesto que un array con índice alfanumérico (array asociativo) no es capaz de procesarlo bien cuando lo escribimos dentro de una cadena.
Para salvar esta situación entran en juego la mencionada sintaxis compleja de las llaves. Simplemente vamos a escribir el arraya asociativo que deseamos que PHP sustituya encerrado entre llaves. Así PHP lo reconocerá perfectamente.
$array = array('uno' => 1, 'dos' => 2, 'tres' => 40, 'cuatro' => 55);
$cadena = "La posición 'tres' contiene el dato {$array['tres']}"; //Ahora funciona bien
echo $cadena; //escribe La posición 'tres' contiene el dato 40
Quizás en un primer momento esta sintaxis de las llaves no te parezca muy útil, pero te aseguramos que en tu día a día con PHP la vas a usar bastante, porque muchas veces en PHP tienes datos que te vienen de arrays asociativos, o de otros tipos de estructuras que no se interpolan correctamente cuando estás escribiendo valores dentro de cadenas (siempre con comillas dobles).
Aunque no hemos tratado todavía cómo se reciben datos que te llegan de formularios, podemos adelantar aquí un código sencillo. Imagina que estás recbiendo un formulario y tienes un campo llamado "teléfono" en ese formulario. En la página que recibes ese formulario, te llega como $_POST['telefono']. Si quieres colocar ese teléfono dentro de una cadena podrías usar un código como este:
$telefonoPrefijo = "(+34) {$_POST['telefono']}";
Funciones de cadenas
Las cadenas pueden asimismo ser tratadas por medio de funciones de todo tipo. PHP es un lenguaje muy rico en este sentido, que incluye muchas posibles acciones que podemos realizar sobre ellas con tan solo ejecutar una función: Dividirlas en palabras, eliminar espacios sobrantes, localizar secuencias, remplazar caracteres especiales por su correspondiente en HTML, etc.
Por ejemplo aquí puedes ver el uso de una función bastante útil al programar en PHP y producir salida en HTML, en la que cambiamos todos los caracteres especiales de las entidades HTML (útil para evitar que se inyecte código HTML al documento que no queremos que aparezca formateado, sino escrito en la página con sus etiquetas y todo).
$cadenaOriginal = '<b>Me gusta PHP</b>';
$cadenaRetocada = htmlspecialchars($cadenaOriginal);
echo $cadenaRetocada; //escribe <b>Me gusta PHP</b>
Más adelante veremos algunos nuevos ejemplos de funciones de cadenas. Pero como siempre recomendamos, recuerda mantenerte informado también con la documentación: funciones de string.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...