W3docs

strval()

La función strval() de PHP convierte cualquier valor escalar a string. Aprende su sintaxis, comportamiento con null y booleanos, y cuándo usarla.

Introducción

strval() es una función integrada de PHP que devuelve la representación en string de un valor escalar. Es la forma explícita y legible de decir "dame este valor como string" — la misma conversión que PHP realiza implícitamente cuando haces echo de un valor o lo concatenas con ., pero escrita para que tu intención quede clara.

Esta página explica qué devuelve strval() para cada tipo de dato, cómo maneja null, booleanos, floats, arrays y objetos, y cuándo deberías usarla en lugar de un cast o una de sus funciones hermanas como intval(), floatval() y boolval().

Sintaxis

strval(mixed $value): string

strval() acepta un único argumento, $value, y devuelve un string que lo representa. Funciona con cualquier escalar (int, float, bool, string), con null y con objetos que implementen __toString(). Pasar un array produce el string literal "Array" y genera un aviso (ver Casos límite).

Ejemplo básico

Convierte un entero, un float y un booleano a strings:

php— editable, runs on the server

$var1 es un entero, $var2 un float y $var3 un booleano. Cada uno se convierte a su forma de string. Ten en cuenta que true se convierte en "1" — esto sorprende a muchos principiantes y es la particularidad más importante a recordar.

Cómo se convierte cada tipo

strval() sigue las reglas estándar de manipulación de tipos de PHP. La tabla a continuación muestra el resultado para cada tipo escalar y para null.

Valor de entradaResultado de strval()Notas
10 (int)"10"Dígitos tal como están escritos
3.14 (float)"3.14"Usa la configuración ini precision
true (bool)"1"
false (bool)""String vacío, no "0"
null""String vacío
"hello" (string)"hello"Se devuelve sin cambios

Las reglas false → "" y null → "" vale la pena memorizarlas — son la causa clásica de los errores de "¿por qué mi salida está en blanco?":

<?php
var_dump(strval(false));  // string(0) ""
var_dump(strval(null));   // string(0) ""
var_dump(strval(true));   // string(1) "1"
?>

strval() vs. cast vs. concatenación

Estos tres producen el mismo resultado para escalares, así que la elección es cuestión de legibilidad:

<?php
$n = 42;

$a = strval($n);   // "42" — explicit, named, greppable
$b = (string) $n;  // "42" — language cast
$c = "$n";         // "42" — string interpolation
$d = $n . "";      // "42" — concatenation trick (avoid)
?>

Prefiere strval() o el cast (string) cuando quieras ser explícito. strval() destaca en una situación que un cast no puede igualar: es un callable, por lo que puedes pasarlo a funciones de orden superior como array_map():

<?php
$numbers = [1, 2, 3, 4];

// Turn every element into a string in one line.
$strings = array_map('strval', $numbers);

print_r($strings);
// Array
// (
//     [0] => 1
//     [1] => 2
//     [2] => 3
//     [3] => 4
// )

var_dump($strings[0]); // string(1) "1"
?>

No puedes escribir array_map('(string)', $numbers) — no existe un callable de cast — así que strval es la forma limpia de aplicar un cast sobre una colección.

Floats: atención a la precisión

Los floats se formatean usando la directiva ini precision de PHP (14 dígitos significativos por defecto), y los números muy grandes o muy pequeños pasan a notación científica. Esto significa que strval() no es la herramienta adecuada para mostrar dinero o salida con decimales fijos — usa number_format() o sprintf() para eso.

<?php
echo strval(0.1 + 0.2) . "\n";   // 0.3   (precision rounds the float error)
echo strval(1.0) . "\n";         // 1     (trailing ".0" is dropped)
echo strval(1.0e21) . "\n";      // 1.0E+21  (scientific notation)

// For a fixed two-decimal price, use sprintf instead:
echo sprintf('%.2f', 1.0) . "\n"; // 1.00
?>

Casos límite: arrays y objetos

strval() está pensada para escalares. Dos casos no escalares se comportan de manera especial:

Los arrays se convierten al string literal "Array" y generan un aviso — casi nunca es lo que se desea. Para convertir un array en texto usa implode() o json_encode():

<?php
$data = [1, 2, 3];

echo strval($data);            // Warning: Array to string conversion -> "Array"
echo implode(', ', $data);     // 1, 2, 3
echo json_encode($data);       // [1,2,3]
?>

Los objetos se convierten llamando a su método __toString(). Si la clase no define uno, PHP lanza un Error:

<?php
class Money
{
    public function __construct(private float $amount) {}

    public function __toString(): string
    {
        return sprintf('$%.2f', $this->amount);
    }
}

echo strval(new Money(5)); // $5.00
?>

Cuándo usar strval()

  • Aplicar un cast sobre una colección con array_map('strval', $items) — el caso de uso más destacado.
  • Forzar semántica de string antes de una comparación estricta (===) o antes de pasar un valor a una API o función que requiere string.
  • Código autodocumentado, donde un strval() con nombre es más claro que un cast (string) a secas.

Para las conversiones inversas, consulta las funciones hermanas intval(), floatval() y boolval(). Para inspeccionar el tipo de un valor antes de convertirlo, usa gettype() o cámbialo en su lugar con settype().

Conclusión

strval() devuelve la forma de string de un valor escalar, reflejando las reglas de conversión implícita de PHP pero indicando tu intención de forma explícita. Recuerda sus tres particularidades: true se convierte en "1", tanto false como null se convierten en el string vacío "", y los arrays se convierten en "Array" con el correspondiente aviso. Úsala cuando necesites un callable de conversión a string (especialmente con array_map), y usa number_format() o sprintf() cuando necesites un formato numérico controlado.

Práctica

Práctica
¿Qué hace la función strval() en PHP?
¿Qué hace la función strval() en PHP?
Was this page helpful?