strval()
La funzione strval() in PHP converte un valore in una stringa. Scopri come gestisce int, float, bool, null, array e oggetti.
Introduzione
strval() è una funzione PHP built-in che restituisce la rappresentazione in stringa di un valore scalare. È il modo esplicito e leggibile per dire "dammi questo valore come stringa" — la stessa conversione che PHP esegue implicitamente quando usi echo su un valore o lo concateni con ., ma scritta in modo che l'intenzione sia chiara.
Questa pagina illustra cosa restituisce strval() per ogni tipo di dato, come gestisce null, i boolean, i float, gli array e gli oggetti, e quando è preferibile usarla rispetto a un cast o a una delle sue funzioni sorelle come intval(), floatval() e boolval().
Sintassi
strval(mixed $value): stringstrval() accetta un singolo argomento, $value, e restituisce una string che lo rappresenta. Funziona con qualsiasi scalare (int, float, bool, string), con null e con oggetti che implementano __toString(). Passare un array produce la stringa letterale "Array" e genera un avviso (vedi Casi limite).
Esempio base
Converti un intero, un float e un boolean in stringhe:
$var1 è un intero, $var2 un float e $var3 un boolean. Ognuno viene convertito nella sua forma stringa. Nota che true diventa "1" — questo sorprende molti principianti ed è la peculiarità più importante da ricordare.
Come viene convertito ogni tipo
strval() segue le regole standard di type-juggling di PHP. La tabella seguente elenca il risultato per ogni tipo scalare e per null.
| Valore di input | Risultato di strval() | Note |
|---|---|---|
10 (int) | "10" | Cifre così come sono |
3.14 (float) | "3.14" | Usa l'impostazione ini precision |
true (bool) | "1" | |
false (bool) | "" | Una stringa vuota, non "0" |
null | "" | Stringa vuota |
"hello" (string) | "hello" | Restituita invariata |
Le regole false → "" e null → "" meritano di essere memorizzate — sono la classica causa dei bug "perché il mio output è vuoto?":
<?php
var_dump(strval(false)); // string(0) ""
var_dump(strval(null)); // string(0) ""
var_dump(strval(true)); // string(1) "1"
?>strval() vs. cast vs. concatenazione
Questi tre producono lo stesso risultato per i scalari, quindi la scelta riguarda la leggibilità:
<?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)
?>Preferisci strval() o il cast (string) quando vuoi essere esplicito. strval() eccelle in una situazione in cui un cast non può competere: è un callable, quindi puoi passarla a funzioni di ordine superiore come 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"
?>Non puoi scrivere array_map('(string)', $numbers) — non esiste un cast callable — quindi strval è il modo pulito per applicare una conversione a un'intera collezione.
Float: attenzione alla precisione
I float vengono formattati usando la direttiva ini precision di PHP (14 cifre significative per impostazione predefinita), e i numeri molto grandi o molto piccoli passano alla notazione scientifica. Ciò significa che strval() non è lo strumento giusto per visualizzare prezzi o output a decimali fissi — usa number_format() o sprintf() per quello.
<?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
?>Casi limite: array e oggetti
strval() è pensata per i scalari. Due casi non scalari si comportano in modo speciale:
Gli array vengono convertiti nella stringa letterale "Array" e generano un avviso — quasi mai quello che si vuole. Per trasformare un array in testo 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]
?>Gli oggetti vengono convertiti chiamando il loro metodo __toString(). Se la classe non ne definisce uno, PHP lancia 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
?>Quando usare strval()
- Mappare una conversione su una collezione con
array_map('strval', $items)— il caso d'uso di punta. - Forzare la semantica stringa prima di un confronto rigoroso (
===) o prima di passare a un'API o a una funzione con type-hintstring. - Codice auto-documentante, dove un
strval()esplicito è più leggibile di un semplice cast(string).
Per le conversioni inverse, vedi le funzioni sorelle intval(), floatval() e boolval(). Per ispezionare il tipo di un valore prima di convertirlo, usa gettype() o modificalo in place con settype().
Conclusione
strval() restituisce la forma stringa di un valore scalare, rispecchiando le regole di conversione implicita di PHP ma dichiarando esplicitamente l'intenzione. Ricorda le sue tre peculiarità: true diventa "1", sia false che null diventano la stringa vuota "", e gli array diventano l'infausto "Array" con avviso. Usala quando hai bisogno di un callable per la conversione a stringa (specialmente con array_map), e usa number_format() o sprintf() quando hai bisogno di una formattazione numerica controllata.