php - 为什么这个假值会转换为空字符串而不是 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) .
是另一种“修复”吗?(虽然我还是想知道为什么)
解决方案
转换为字符串的布尔值“false”将是空字符串。这就是 PHP 转换在这种情况下的工作方式。intval($emailAvailable)
会将其强制为整数 0 或 1,然后将其转换为字符串形式的“0”或“1”。
boolval($emailAvailable)
不会改变任何东西;它将参数转换为一个布尔变量,它已经是。
推荐阅读
- php - Idgenerator laravel 8,如何修复异常“表字段类型为 bigint 但前缀为字符串”
- c++ - Qt 应用程序内存使用情况
- asp.net - 在 ASP.NET 中使用 AJAX 在 Web 服务中调用多个函数
- javascript - Javascript OOP - SyntaxError:标识符“密码”已被声明
- android - ViewCompat.setOnApplyWindowInsetsListener 在将视图视为属性时不生效
- javascript - 计算字符串中的相同字母但不是全部长度
- javascript - 我一直在创建一个简单的验证。如何获取用户输入的输入并验证我的数据?
- reactjs - axios调用jsp文件
- python - 如何使输入类型和重量类型相同?
- google-apps-script - 如何在不同的文件中使用 GAS 类,与文件加载顺序无关?