【问题标题】:Boolean values in PHP always evaluate to false?PHP中的布尔值总是评估为假?
【发布时间】:2018-07-11 19:20:19
【问题描述】:

我正在使用一个 API,它返回有关数据库中用户的 JSON。

我在评估用户数据中的一些布尔值时遇到了一些问题。我已将所有信息提取到一个名为 $search_results 的数组中 - 然后我循环遍历该数组以检查它们是否在 ok_to_list_donor 字段中列出了任何内容。

如果ok_to_list_donor 为空,我需要检查我们是否有权限。如果我们确实获得了许可,那么我将用他们的名字更新ok_to_list_donor_field

如果我们没有权限,我会用 AnonymousXXXX 更新它,其中 XXXX 是他们的内部 ID。

在某些情况下,他们没有给予我们明确的许可,也没有拒绝我们。该值很可能返回为 NULL,因此我们使用 Anonymous?XXXX 来表示。

这是我正在使用的循环。

foreach ($search_results as $fields) {
// If they don't have an "ok to list donor" value, check if we have permission
    if (empty($fields["donor"]["ok_to_list_donor"])) {
        // If we don't have permission, update as anon
        if ((boolean)$fields["permisson"] === (boolean)false) {
          var_dump($fields["permission"]);
          echo "Update as AnonXXXX";
        }
        // If we do have permission, update the field with name
        elseif ((boolean)$fields["permission"] === (boolean)true) {
          var_dump($fields["permission"]);
          echo "Update as First Name Last Name";
        }
        // The only possible case left
        // If permission is null, it's unclear
        else {
          var_dump($fields["permission"]);
          echo "Update as Anon?XXXX";
        }
    }
}

我包含了 var_dump 来检查 $fields["permission"] 的类型和值,并且我得到了我预期的所有值,但是,即使 $fields["permission"] 评估为 (bool)true - 我看到了我的调试输出对于(bool)false 案例。

我进行了类型转换,因为我在比较 $fields["permission"] === false 等等时遇到了这个错误,并且想确保来自 API 的数据完全符合我的预期。

这是我看到的输出:

bool(true)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX

我是否错误地进行了布尔比较? PHP 新手,不确定我是否遗漏了一些重要内容

【问题讨论】:

  • error_reporting(E_ALL); ini_set('display_errors', '1'); 会告诉你这个问题。

标签: php boolean


【解决方案1】:

您的第一个比较对象是$fields["permisson"],而不是$fields["permission"]。您的密钥中有一个简单的错字。解决这个问题,所有的演员应该能够消失。

【讨论】:

    【解决方案2】:

    已经指出了一个错字,但在修正了所有布尔转换后真的需要消失。

    没有必要将文字布尔值转换为 (boolean)false 之类的布尔值。这绝对是一个布尔值。那部分没有伤害任何东西,只是没有意义。

    不过,将您要比较的值转换为布尔值会适得其反。

    (boolean)$fields["permission"] 会将null 的值转换为false,因此如果$fields["permission"] 的可能值为truefalsenull,则永远不会到达else 块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多