W3docs

is_string()

La función is_string() de PHP comprueba si una variable es de tipo string. Aprende su sintaxis, valores de retorno y casos de uso comunes.

Introducción

is_string() es una función integrada de PHP que indica si un valor es del tipo string. Un string es un tipo de dato que almacena una secuencia de caracteres, como "hello" o "42".

Como PHP es de tipado débil, el tipo de un valor depende con frecuencia de su origen — entrada de formulario, una base de datos, una carga JSON o el valor de retorno de una función. is_string() te permite confirmar que un valor realmente es un string antes de llamar operaciones exclusivas de strings (como strtoupper() o substr()), evitando así errores de tipo y resultados inesperados.

Esta página cubre la sintaxis, qué devuelve is_string() para cada tipo de PHP, la trampa habitual de las "cadenas numéricas" y cómo se diferencia de funciones relacionadas como is_numeric() y gettype().

Sintaxis

is_string(mixed $value): bool
  • $value — la variable o expresión a comprobar.
  • Devuelvetrue si $value es un string, false para cualquier otro tipo.

is_string() comprueba el tipo, no el contenido. Solo inspecciona un valor a la vez y nunca lo convierte.

Ejemplo básico

php— editable, runs on the server

$var1 es un string, por lo que is_string() devuelve true; $var2 es un float, así que devuelve false.

Consejo: Usa var_dump() en lugar de echo al probar resultados booleanos. echo true imprime 1, pero echo false no imprime nada en absoluto — lo que hace muy fácil pasar por alto un resultado false. var_dump() muestra bool(true) / bool(false) de forma explícita.

Qué devuelve is_string() para cada tipo

Solo los strings reales superan la comprobación — números, booleanos, null y arrays devuelven todos false, aunque parezcan strings.

<?php
var_dump(is_string("hello"));      // bool(true)
var_dump(is_string("42"));         // bool(true)  — a digit string is still a string
var_dump(is_string(42));           // bool(false) — integer
var_dump(is_string(3.14));         // bool(false) — float
var_dump(is_string(true));         // bool(false) — boolean
var_dump(is_string(null));         // bool(false) — null
var_dump(is_string(['a', 'b']));   // bool(false) — array
?>

La conclusión clave: is_string("42") es true. Las comillas lo convierten en un string de dígitos, no en un número.

Un uso práctico: guardia antes de operaciones con strings

Un uso típico es validar un valor antes de ejecutar funciones de string, para que una entrada no confiable o de tipo mixto no pueda provocar un TypeError.

<?php
function shout($value): string {
    if (!is_string($value)) {
        return "Not a string";
    }
    return strtoupper($value) . "!";
}

echo shout("hello") . "\n"; // HELLO!
echo shout(123) . "\n";     // Not a string
?>

is_string() vs. is_numeric()

Estas dos funciones suelen confundirse porque las cadenas numéricas se sitúan entre ambas. is_string() pregunta "¿es este el tipo string?", mientras que is_numeric() pregunta "¿representa este valor un número?" — y una cadena numérica responde a las dos.

<?php
$value = "42";

var_dump(is_string($value));  // bool(true)  — it IS a string
var_dump(is_numeric($value)); // bool(true)  — and it looks like a number
?>

Si específicamente necesitas un tipo entero o float en lugar de un string, usa is_int() o is_float(). Para convertir un valor a string en lugar de simplemente comprobarlo, consulta settype() o strval().

Conclusión

is_string() es una comprobación de tipo simple y fiable: devuelve true solo para valores que son genuinamente del tipo string y false para todo lo demás. Recurre a ella siempre que necesites asegurarte de que un valor es un string antes de aplicar operaciones de string — por ejemplo, al manejar entrada del usuario, respuestas de API o cualquier dato cuyo tipo no esté garantizado. Recuerda las dos trampas: un número entre comillas como "42" sí es un string, y debes inspeccionar los resultados con var_dump() en lugar de echo para que un false no desaparezca. Para comprobaciones relacionadas, explora is_numeric(), is_int(), is_array() y gettype().

Práctica

Práctica
¿Cuáles de las siguientes afirmaciones sobre 'is_string' en PHP son verdaderas?
¿Cuáles de las siguientes afirmaciones sobre 'is_string' en PHP son verdaderas?
Was this page helpful?