为什么这个假值转换为空字符串而不是0?

时间:2019-02-25 02:38:11

标签: php

通过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) .

曾经是替代的“解决方案”吗? (尽管我仍然想知道为什么)

2 个答案:

答案 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 . '", "...