Les autres solutions ici ont toutes des mises en garde (bien qu'elles répondent à la question en cours). Si vous (1) bouclez sur des types mixtes ou (2) voulez une solution générique que vous pouvez exporter en tant que fonction ou inclure dans vos utilitaires, aucune des autres solutions ici ne fonctionnera.
La solution la plus simple et la plus explicite est:
// simplest, most-readable
if (is_bool($res) {
$res = $res ? 'true' : 'false';
}
// same as above but written more tersely
$res = is_bool($res) ? ($res ? 'true' : 'false') : $res;
// Terser still, but completely unnecessary function call and must be
// commented due to poor readability. What is var_export? What is its
// second arg? Why are we exporting stuff?
$res = is_bool($res) ? var_export($res, 1) : $res;
Mais la plupart des développeurs qui lisent votre code auront besoin d'un voyage sur http://php.net/var_export pour comprendre ce que cela var_export
fait et quel est le deuxième paramètre.
1. var_export
Fonctionne pour l' boolean
entrée mais convertit tout le reste en un string
aussi.
// OK
var_export(false, 1); // 'false'
// OK
var_export(true, 1); // 'true'
// NOT OK
var_export('', 1); // '\'\''
// NOT OK
var_export(1, 1); // '1'
2. ($res) ? 'true' : 'false';
Fonctionne pour les entrées booléennes mais convertit tout le reste (entiers, chaînes) en vrai / faux.
// OK
true ? 'true' : 'false' // 'true'
// OK
false ? 'true' : 'false' // 'false'
// NOT OK
'' ? 'true' : 'false' // 'false'
// NOT OK
0 ? 'true' : 'false' // 'false'
3. json_encode()
Mêmes problèmes var_export
et probablement pire car json_encode
ne peut pas savoir si la chaîne true
était destinée à une chaîne ou à un booléen.