首页 > 解决方案 > 为什么这个假值会转换为空字符串而不是 0?

问题描述

在通过 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"的是“可用”的价值,而不是""

200 OK
{"available": "0", ...

如您所见,查询返回的行数为 1。所以我希望$emailAvailable包含一个布尔值 false ( 1 < 1)。

我能够通过替换明确地将值强制为“1”或“0”来修复

. $emailAvailable .

和:

. ($emailAvailable ? "1" : "0") .

但我想了解为什么这是必要的。


更新:

. boolval($emailAvailable) .

是另一种“修复”吗?(虽然我还是想知道为什么)

标签: php

解决方案


转换为字符串的布尔值“false”将是空字符串。这就是 PHP 转换在这种情况下的工作方式。intval($emailAvailable)会将其强制为整数 0 或 1,然后将其转换为字符串形式的“0”或“1”。

boolval($emailAvailable)不会改变任何东西;它将参数转换为一个布尔变量,它已经是。


推荐阅读