W3docs

strval()

A função strval() do PHP converte qualquer valor escalar em string. Saiba como funciona com int, float, bool e null.

Introdução

strval() é uma função interna do PHP que retorna a representação em string de um valor escalar. É a forma explícita e legível de dizer "dê-me este valor como string" — a mesma conversão que o PHP realiza implicitamente quando você usa echo em um valor ou o concatena com ., mas escrita de forma que a sua intenção fique clara.

Esta página aborda o que strval() retorna para cada tipo de dado, como ela lida com null, booleanos, floats, arrays e objetos, e quando você deve usá-la em vez de um cast ou de uma de suas funções irmãs como intval(), floatval() e boolval().

Sintaxe

strval(mixed $value): string

strval() recebe um único argumento, $value, e retorna uma string que o representa. Funciona com qualquer escalar (int, float, bool, string), com null, e com objetos que implementam __toString(). Passar um array produz a string literal "Array" e gera um aviso (veja Casos especiais).

Exemplo básico

Converta um inteiro, um float e um booleano para strings:

php— editable, runs on the server

$var1 é um inteiro, $var2 é um float e $var3 é um booleano. Cada um é convertido para sua forma em string. Note que true se torna "1" — isso surpreende muitos iniciantes e é o detalhe mais importante a lembrar.

Como cada tipo é convertido

strval() segue as regras padrão de type juggling do PHP. A tabela abaixo lista o resultado para cada tipo escalar e para null.

Valor de entradaResultado de strval()Notas
10 (int)"10"Dígitos como escritos
3.14 (float)"3.14"Usa a configuração ini precision
true (bool)"1"
false (bool)""Uma string vazia, não "0"
null""String vazia
"hello" (string)"hello"Retornado sem alteração

As regras false → "" e null → "" valem a pena memorizar — elas são a causa clássica de bugs do tipo "por que minha saída está em branco?":

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

strval() vs. cast vs. concatenação

As três formas produzem o mesmo resultado para escalares, então a escolha é uma questão de legibilidade:

<?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)
?>

Prefira strval() ou o cast (string) quando quiser ser explícito. strval() se destaca em uma situação que um cast não consegue cobrir: ela é um callable, portanto pode ser passada para funções de ordem 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"
?>

Você não pode escrever array_map('(string)', $numbers) — não existe cast callable — por isso strval é a forma limpa de aplicar um cast a uma coleção.

Floats: atenção à precisão

Floats são formatados usando a diretiva ini precision do PHP (14 dígitos significativos por padrão), e números muito grandes ou muito pequenos passam para notação científica. Isso significa que strval() não é a ferramenta certa para exibir valores monetários ou saídas de decimais fixos — use number_format() ou sprintf() para isso.

<?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 especiais: arrays e objetos

strval() foi pensada para escalares. Dois casos não escalares se comportam de forma especial:

Arrays convertem para a string literal "Array" e disparam um aviso — quase nunca é o que você quer. Para transformar um array em texto, use implode() ou 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]
?>

Objetos são convertidos chamando seu método __toString(). Se a classe não definir um, o PHP lança um 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
?>

Quando usar strval()

  • Mapear um cast sobre uma coleção com array_map('strval', $items) — o caso de uso mais destacado.
  • Forçar semântica de string antes de uma comparação estrita (===) ou antes de passar para uma API ou função que usa type-hint string.
  • Código autodocumentado, onde um strval() nomeado é mais legível do que um cast (string) puro.

Para as conversões inversas, veja as funções complementares intval(), floatval() e boolval(). Para inspecionar o tipo de um valor antes de convertê-lo, use gettype() ou altere-o no lugar com settype().

Conclusão

strval() retorna a forma em string de um valor escalar, espelhando as regras de conversão implícita do PHP, mas declarando sua intenção explicitamente. Lembre-se de seus três comportamentos peculiares: true vira "1", tanto false quanto null viram a string vazia "", e arrays viram "Array" com um aviso. Use-a quando precisar de um callable de conversão para string (especialmente com array_map), e use number_format() ou sprintf() quando precisar de formatação numérica controlada.

Prática

Prática
O que a função strval() do PHP faz?
O que a função strval() do PHP faz?
Was this page helpful?