En route vers PHP 5.5 : Conversion en booléen avec boolval
25 octobre 2012 —PHP fournit depuis longtemps des fonctions de conversion de type ; je pense notamment à strval()
, floatval()
, ou encore intval()
, qui existaient toutes déjà en PHP 4.
En parallèle, il existe de nombreux opérateurs de transtypage, dont (string)
, (float)
, (int)
, ou encore (bool)
.
Fonction de conversion en booléen : boolval()
Cela dit, jusqu’à présent, il n’existait pas de fonction permettant de convertir une donnée en booléen, alors que le cast (bool)
existait.
Pour faire disparaitre cette incohérence, la version actuelle de la branche master
de PHP (et donc, probablement, PHP 5.5) inclut la fonction boolval()
, qui se comporte exactement comme l’opérateur de transtypage correspondant.
Quel intérêt, hormis la cohérence ? Une fonction est de type callable
; et peut donc, en particulier, être utilisée comme fonction de rappel – alors qu’un opérateur de transtypage ne répond pas à ce besoin.
Quelques exemples
Comme exemples, voyons quelques résultats de conversions, et j’enchainerai en utilisant boolval()
comme callable.
Résultats de conversion
A titre d’illustration, voici quelques exemples d’utilisation de cette nouvelle fonction boolval()
, montrant le résultat qu’elle retourne avec différents types de données en entrée.
Avec des booléens :
var_dump( boolval(false) ); // bool(false)
var_dump( boolval(true) ); // bool(true)
Résultat :
bool(false)
bool(true)
Avec des entiers :
var_dump( boolval(0) ); // bool(false)
var_dump( boolval(1) ); // bool(true)
Résultat :
bool(false)
bool(true)
Avec des flottants :
var_dump( boolval(0.00) ); // bool(false)
var_dump( boolval(3.14) ); // bool(true)
Résultat :
bool(false)
bool(true)
Avec des chaines de caractères :
var_dump( boolval("") ); // bool(false)
var_dump( boolval("0") ); // bool(false)
var_dump( boolval("hello") ); // bool(true)
var_dump( boolval("123546") ); // bool(true)
var_dump( boolval("098765") ); // bool(true)
Résultat :
bool(false)
bool(false)
bool(true)
bool(true)
bool(true)
Avec des tableaux :
var_dump( boolval([]) ); // bool(false)
var_dump( boolval([0]) ); // bool(true)
var_dump( boolval([1, 2, 3]) ); // bool(true)
Résultat :
bool(false)
bool(true)
bool(true)
Et avec des objets :
var_dump( boolval(new stdClass()) ); // bool(true)
Résultat :
bool(true)
Sans surprise, boolval()
effectue les même conversions que celles auxquelles nous étions habitués avec l’opérateur de transtypage (bool)
.
boolval()
utilisée comme callable
L’opérateur de transtypage (bool)
ne peut pas être utilisé comme callable ; pour cela, il faut une méthode, une fonction.
Typiquement, en PHP <= 5.4, pour convertir tous les éléments d’une liste en booléens, nous devrions utiliser une portion de code de ce type :
$liste = [ 'plop', 456, new stdClass(), 0, false, '1' ];
$result = array_map(function ($item) {
return (bool)$item;
},
$liste);
var_dump($result);
Et nous obtiendrons en sortie :
array(6) {
[0]=>
bool(true)
[1]=>
bool(true)
[2]=>
bool(true)
[3]=>
bool(false)
[4]=>
bool(false)
[5]=>
bool(true)
}
Avec la branche master
de PHP (et donc, probablement, PHP 5.5), il devient possible d’utiliser la nouvelle fonction boolval()
, sans avoir à écrire nous-même une fonction de rappel :
$liste = [ 'plop', 456, new stdClass(), 0, false, '1' ];
$result = array_map('boolval', $liste);
var_dump($result);
J'ai presque l'impression de me répêter, mais, encore une fois, voici une petite amélioration qui rend PHP plus cohérent avec lui-même et nous facilite la vie ;-)