代码之家  ›  专栏  ›  技术社区  ›  ToolmakerSteve

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

php
  •  0
  • ToolmakerSteve  · 技术社区  · 6 年前

    在通过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 包含布尔值“假”( 1 < 1 )

    我可以通过明确地强制值为“1”或“0”来修复,方法是替换

    . $emailAvailable .
    

    用:

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

    但我想知道为什么这是必要的。


    更新:

    . boolval($emailAvailable) .
    

    是否是另一种“修复”?(不过我还是想知道原因)

    2 回复  |  直到 6 年前
        1
  •  2
  •   lufc    6 年前

    您可以在这里阅读手册: http://php.net/manual/en/language.types.string.php#language.types.string.casting

    布尔真值转换为字符串“1”。布尔值false转换为“”(空字符串)。这允许在布尔值和字符串值之间来回转换。

    如果要将变量强制转换为整数,只需使用 (int) 铸工。

    echo("200 OK\r\n" . '{"available"="' . (int) $emailAvailable . '", "...
    
        2
  •  2
  •   Greg Schmidt    6 年前

    转换为字符串的布尔值“false”将是空字符串。这就是PHP转换在本例中的工作方式。 intval($emailAvailable) 将强制它为整数0或1,该整数作为字符串转换为“0”或“1”。

    boolval($emailAvailable) 不会更改任何内容;它会将参数强制转换为一个布尔变量,而这个变量已经是布尔变量了。

    推荐文章