Інші рішення тут мають усі застереження (хоча вони стосуються цього питання). Якщо ви (1) перебираєте змішані типи або (2) хочете загальне рішення, яке можна експортувати як функцію або включити до своїх утиліт, жодне з інших рішень тут не працюватиме.
Найпростішим і зрозумілим рішенням є:
// 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;
Але більшості розробників, які читають ваш код, знадобиться поїздка на http://php.net/var_export, щоб зрозуміти, що var_export
робить і що таке другий парам.
1. var_export
Працює для boolean
введення даних, але перетворює все інше string
в а.
// 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';
Працює для булевого введення, але перетворює все інше (ints, string) у true / false.
// OK
true ? 'true' : 'false' // 'true'
// OK
false ? 'true' : 'false' // 'false'
// NOT OK
'' ? 'true' : 'false' // 'false'
// NOT OK
0 ? 'true' : 'false' // 'false'
3. json_encode()
Ті ж проблеми, що var_export
і, ймовірно, гірші, тому що json_encode
не можу знати, чи призначений рядок true
був рядком або булевим.