通过POST请求数据库查询后,我将JSON编码的响应发送回调用方(浏览器或应用程序)。
php:
$result = Database::query($str_query);
$emailAvailable = $result->num_rows < 1;
echo("200 OK\r\n" . '{"available": "' . $emailAvailable . '", "query": "' . $str_query . '", "count": "' . $result->num_rows . '"}');
回显的字符串:
200 OK
{"available": "", "query": "SELECT * FROM tblusers WHERE email='test@test.com'", "count": "1"}
我期望得到的是"0"
而不是""
的“ available”值:
200 OK
{"available": "0", ...
如您所见,查询返回的行计数为1。
因此,我希望$emailAvailable
包含布尔假(1 < 1
)。
我能够通过替换明确地将其值强制为“ 1”或“ 0”来进行修复
. $emailAvailable .
具有:
. ($emailAvailable ? "1" : "0") .
但是我想了解为什么这样做是必要的。
更新:
会
. boolval($emailAvailable) .
曾经是替代的“解决方案”吗? (尽管我仍然想知道为什么)
答案 0 :(得分:2)
转换为字符串的布尔值“ false”将为空字符串。这就是这种情况下PHP转换的工作方式。 intval($emailAvailable)
会将其强制为0或1的整数,该整数将作为字符串转换为“ 0”或“ 1”。
boolval($emailAvailable)
不会更改任何内容;它将参数转换为一个布尔变量,它已经是。
答案 1 :(得分:2)
您可以在此处阅读手册:http://php.net/manual/en/language.types.string.php#language.types.string.casting
布尔TRUE值将转换为字符串“ 1”。布尔值FALSE转换为“”(空字符串)。这样可以在布尔值和字符串值之间来回转换。
如果要将变量强制转换为整数,只需使用(int)
强制转换符即可。
echo("200 OK\r\n" . '{"available"="' . (int) $emailAvailable . '", "...