Wszystkie pozostałe rozwiązania mają tutaj pewne zastrzeżenia (choć odnoszą się do podanego pytania). Jeśli (1) zapętlasz mieszane typy lub (2) chcesz ogólnego rozwiązania, które możesz wyeksportować jako funkcję lub dołączyć do swoich narzędzi, żadne inne rozwiązanie tutaj nie będzie działać.
Najprostszym i najbardziej zrozumiałym rozwiązaniem jest:
// 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;
Ale większość programistów czytających Twój kod będzie potrzebować podróży na http://php.net/var_export, aby zrozumieć, co var_exportrobi i jaki jest drugi parametr.
1. var_export
Działa na booleandane wejściowe, ale konwertuje także wszystko inne 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';
Działa dla danych logicznych, ale konwertuje wszystko inne (inty, ciągi znaków) na 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()
Te same problemy var_exporti prawdopodobnie gorsze, ponieważ json_encodenie można wiedzieć, czy ciąg truemiał być ciągiem, czy wartością logiczną.