Buradaki diğer çözümlerin hepsinde uyarılar var (eldeki soruyu ele alsalar da). (1) Karışık tipler üzerinde döngü yapıyorsanız veya (2) bir işlev olarak dışa aktarabileceğiniz veya yardımcı programlarınıza ekleyebileceğiniz genel bir çözüm istiyorsanız, buradaki diğer çözümlerin hiçbiri çalışmayacaktır.
En basit ve en açıklayıcı çözüm:
// 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;
Ancak kodunuzu okuyan çoğu geliştiricinin , ne yaptığını ve ikinci parametrenin ne olduğunu anlamak için http://php.net/var_export adresine bir yolculuk yapması gerekir var_export
.
1. var_export
boolean
Giriş için çalışır, ancak diğer her şeyi bir 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';
Boole girişi için çalışır, ancak diğer her şeyi (ints, dize) true / false değerine dönüştürür.
// OK
true ? 'true' : 'false' // 'true'
// OK
false ? 'true' : 'false' // 'false'
// NOT OK
'' ? 'true' : 'false' // 'false'
// NOT OK
0 ? 'true' : 'false' // 'false'
3. json_encode()
Dize bir dize mi yoksa bir boole mi amaçlandığını bilemediğinden, aynı sorunlar var_export
ve muhtemelen daha kötü .json_encode
true