php-strings-en-php

Strings en PHP

  • 4 min

Un string es una secuencia de caracteres que usamos para representar y manipular texto.

La web es, en esencia, texto. HTML es texto, JSON es texto, las URLs son texto. Por eso, dominar los Strings (cadenas de caracteres) es fundamental.

En PHP, un string no es más que una serie de caracteres, donde cada carácter equivale a un byte. Pero cuidado, porque en nuestro idioma (español), letras como la ñ o las tildes ocupan más de un byte. Luego hablaremos de eso.

Comillas simples (') vs comillas dobles (")

Esta es la primera duda del millón. ¿Da lo mismo usar unas u otras? No.

Son literales. Lo que escribes dentro es exactamente lo que sale. PHP no intenta interpretar nada.

$nombre = 'Luis';
echo 'Hola $nombre'; 
// Salida: Hola $nombre
// (No sustituye la variable)
Copied!

Son interpretadas. PHP revisa el interior de la cadena buscando variables o caracteres de escape para procesarlos.

$nombre = 'Luis';
echo "Hola $nombre"; 
// Salida: Hola Luis
// (Sí sustituye la variable)
Copied!

Usa comillas simples por defecto si es texto plano, y dobles si necesitas meter variables dentro.

Mito de rendimiento: antiguamente se decía que las comillas simples eran mucho más rápidas. En PHP moderno, la diferencia suele ser irrelevante frente a la claridad del código.

Interpolación de variables

Meter variables dentro de cadenas (Interpolación) es comodísimo, pero tiene reglas.

Si quieres meter algo más complejo que una variable simple (como un valor de un array o una propiedad de un objeto), debes usar llaves {} para delimitar.

$usuario = ['nombre' => 'Ana', 'puntos' => 100];

// Mal (Puede fallar o dar error de sintaxis)
echo "El usuario $usuario['nombre'] ganó"; 

// Bien (Sintaxis Compleja / Curly Syntax)
echo "El usuario {$usuario['nombre']} ganó";
Copied!

Las llaves le dicen a PHP: “Oye, todo lo que hay aquí dentro es la variable que quiero imprimir”. Es una práctica de limpieza excelente.

Concatenación: el punto (.)

A diferencia de JavaScript o Python que usan el +, en PHP unimos cadenas con el punto ..

$saludo = "Hola " . $nombre . ", bienvenido.";
Copied!

También existe el operador de asignación y concatenación (.=), muy útil para construir textos largos línea a línea:

$html = "<ul>";
$html .= "<li>Elemento 1</li>";
$html .= "<li>Elemento 2</li>";
$html .= "</ul>";
Copied!

Heredoc para textos multilínea

Imagina que tienes que escribir un bloque grande de HTML o una consulta SQL compleja dentro de PHP.

La forma dolorosa:

$html = "<div class=\"tarjeta\">"; // Escapando comillas...
$html .= "<h1>" . $titulo . "</h1>"; // Concatenando...
Copied!

Esto es ilegible y propenso a errores.

La solución: Heredoc (<<<) Heredoc te permite escribir un bloque de texto multilínea sin preocuparte por escapar comillas, y manteniendo la capacidad de usar variables.

$titulo = "Mi Artículo";
$contenido = "Lorem ipsum...";

// EOD es un identificador arbitrario (End Of Data)
$html = <<<EOD
<div class="tarjeta">
    <h1>$titulo</h1>
    <p>$contenido</p>
    <button onclick="alert('Hola')">Click</button>
</div>
EOD;
Copied!

Fíjate: puedo usar comillas dobles " y simples ' dentro del HTML sin escapar nada. Es limpieza pura.

Nowdoc: Si quieres lo mismo pero sin que interprete variables (como comillas simples gigantes), usa <<<'EOD' (con comillas simples en el identificador). Ideal para bloques de código o SQL fijos.

Funciones modernas de PHP 8+

PHP 8 incorporó funciones con nombres más expresivos para las búsquedas de texto habituales.

Antes (PHP 7 e inferiores)Ahora (PHP 8+)¿Qué hace?
strpos($t, 'x') !== falsestr_contains($t, 'x')¿Contiene el texto?
substr($t, 0, 3) === 'Pre'str_starts_with($t, 'Pre')¿Empieza por…?
substr($t, -3) === 'ing'str_ends_with($t, 'ing')¿Termina en…?

Úsalas. Hacen que tu código se lea más fácil.

El problema de la ñ (multibyte strings)

PHP fue creado cuando el inglés dominaba el mundo. Por defecto, las funciones de string (strlen, substr) cuentan bytes, no letras.

  • La letra a pesa 1 byte.
  • La letra ñ (en UTF-8) pesa 2 bytes.
echo strlen('España'); 
// Resultado: 7 (¡Incorrecto para humanos!)
// E-s-p-a-ñ(2)-a = 7 bytes
Copied!

Solución: Para trabajar en español, usa siempre las versiones Multibyte de las funciones, prefijadas con mb_.

echo mb_strlen('España'); 
// Resultado: 6 (Correcto)
Copied!