boolval()
Guida alla funzione PHP boolval(): sintassi, valori falsy, confronto con il cast (bool) e best practice per l'uso corretto.
Introduzione
La funzione boolval() in PHP è una funzione di conversione di tipo che trasforma qualsiasi valore nel suo equivalente boolean — true o false. Introdotta in PHP 5.5, segue le stesse regole che PHP applica ovunque un valore venga interpretato come condizione (ad esempio all'interno di un'istruzione if), quindi rappresenta un modo chiaro ed esplicito per chiedersi "questo valore è truthy?".
boolval() fa esattamente la stessa cosa del cast (bool). La ragione per cui esiste è che, a differenza di un cast, una funzione può essere passata come callback — ad esempio a array_map() — cosa che un costrutto del linguaggio come (bool) non può fare.
Questa pagina tratta la sintassi, come ciascun tipo viene convertito, il confronto tra boolval() e il cast (bool), e le insidie più comuni (come la string "0").
Sintassi di base
La sintassi di base della funzione boolval() è la seguente:
Sintassi di base della funzione PHP boolval()
boolval(mixed $value): boolIl parametro $value è il valore da convertire. La funzione restituisce sempre un boolean: true per qualsiasi valore truthy e false per qualsiasi valore falsy. Non ha effetti collaterali e non genera mai eccezioni.
Quali valori sono falsy?
PHP tratta solo un insieme fisso di valori come false. Tutto il resto è true. Memorizzare questo breve elenco è fondamentale per usare boolval() correttamente:
falsestesso- l'intero
0e il float0.0(e-0.0) - la string vuota
""e la string"0" - l'array vuoto
[] null- una variabile non definita / non impostata
La string "0" è la classica trappola: non è vuota, eppure PHP la considera falsy. Da notare che "0.0", " " (uno spazio) e "false" sono tutte string truthy.
Esempio di utilizzo
Ecco un esempio di come la funzione boolval() può essere utilizzata in PHP:
Esempio di utilizzo di PHP boolval()
Qui boolval() converte $var1 (un intero non zero) in true e $var2 (zero) in false. Avvolgiamo il risultato in var_export() in modo che il boolean venga stampato come testo letterale true / false — un semplice echo stamperebbe 1 per true e nulla per false, rendendo i risultati difficili da leggere.
boolval() vs il cast (bool)
Per convertire un singolo valore, boolval($x) e (bool) $x sono intercambiabili e producono risultati identici:
<?php
$value = "0";
var_export(boolval($value)); // false
echo "\n";
var_export((bool) $value); // falseQuando conviene quindi usare boolval() invece di (bool)? Ogni volta che è necessario passare la conversione come callable. Un cast è un costrutto del linguaggio, non una funzione, quindi non può essere passato a funzioni di ordine superiore come array_map() o array_filter(). boolval sì:
Filtrare un array mantenendo solo i valori truthy
Ogni elemento viene convertito in un boolean. 1, "hello" e [1] diventano true; gli altri — incluso il subdolo "0" — diventano false.
Insidia comune: la string "0"
Poiché boolval() rispecchia le regole di truthiness di PHP, la string "0" viene valutata come false. Questo crea problemi nel codice che valida l'input dell'utente, poiché i campi dei form arrivano sempre come string:
<?php
$input = "0"; // e.g. $_POST['quantity']
if (boolval($input)) {
echo "treated as true\n";
} else {
echo "treated as false\n"; // this branch runs
}Se si vuole verificare "questa string non è vuota?" anziché "questo valore è truthy?", è preferibile confrontare esplicitamente con "" usando un confronto stretto ($input !== "") invece di affidarsi a boolval().
Best practice per l'uso di boolval()
Per garantire un uso efficiente della funzione boolval() in PHP, è importante seguire alcune best practice:
Usare confronti stretti
Quando si usa la funzione boolval(), è importante utilizzare confronti stretti (===) anziché confronti larghi (==). I confronti larghi possono infatti produrre comportamenti inattesi.
Usare tipi di variabile appropriati
Quando si usa la funzione boolval(), è importante assicurarsi che la variabile da convertire sia del tipo appropriato. Per maggiori dettagli su come i diversi tipi di dato vengono convertiti in boolean, consultare il manuale PHP sul type juggling.
Riferimento alla conversione dei tipi
Capire come i diversi tipi PHP vengono convertiti in boolean aiuta a evitare risultati inattesi:
| Tipo | Converte in true quando | Converte in false quando |
|---|---|---|
string | String non vuota | String vuota "" |
int / float | Valore non zero | 0 o 0.0 |
array | Array non vuoto | Array vuoto [] |
null | Mai | Sempre |
Funzioni correlate
boolval() fa parte della famiglia di helper per la conversione di tipo di PHP. Scegliere quella che corrisponde al tipo desiderato:
intval()— convertire un valore in un intero.floatval()— convertire un valore in un float.strval()— convertire un valore in una string.settype()— modificare il tipo di una variabile in place.gettype()/is_bool()— ispezionare il tipo corrente di una variabile.
Per una panoramica più ampia su come i valori si spostano tra i tipi, vedere PHP data types.
Conclusione
boolval() converte qualsiasi valore in un boolean applicando le regole standard di truthiness di PHP, restituendo false solo per il breve elenco fisso di valori falsy (false, 0, 0.0, "", "0", [], null e le variabili non definite) e true per tutto il resto. Si comporta esattamente come il cast (bool), con il vantaggio aggiuntivo di poter essere usato come callback in funzioni come array_map(). Tenere presente la trappola di "0" quando si valida input di tipo string, e preferire confronti stretti quando si ha bisogno di un controllo preciso.