这里的其他解决方案都有警告(尽管它们解决了眼前的问题)。如果您(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
也会将其他所有内容都转换为a 。
// 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';
适用于布尔输入,但会将其他所有内容(int,字符串)转换为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
是预期的字符串还是布尔值。