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): stringstrval() 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:
$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 entrada | Resultado 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-hintstring. - 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.