if-condition 中的 Null 合并运算符

Null coalescing operator in if-condition

提问人:Skye Ewers 提问时间:1/15/2022 更新时间:1/15/2022 访问量:561

问:

我对 PHP 中的 null 合并运算符的工作原理感到困惑,如果可能的话,我想对以下内容进行一些解释:

我有一个关联数组,表示发布到服务器的数据。该数组中的一个值可以是布尔值,也可以只是不设置。我在 if 条件中使用该值,该条件检查该值是否存在并设置为另一个条件。我检查存在值的方法是使用 null 合并 () 运算符将缺失值替换为 .true??false

这似乎改变了 if 条件的结果。只要条件存在,if 条件就会返回 ,而不管 if 条件的第二部分是什么。true

这怎么可能?

<?php

$body = [];
$body['variable'] = true;
if ($body['variable'] ?? false && false) {
    echo('true');
} else {
    echo('false');
}

// true

unset($body['variable']);
if ($body['variable'] ?? false && false) {
    echo('true');
} else {
    echo('false');
}

// false
php if-statement 布尔 boolean-logic null-coalescing-operator

评论

1赞 nice_dev 1/15/2022
你能添加括号来消除优先级问题吗?
1赞 Barmar 1/15/2022
&&具有高于 的优先级,因此它等效于??if ($body['variable'] ?? (false && false))
0赞 Barmar 1/15/2022
查看 php.net/manual/en/language.operators.precedence.php
0赞 Wakka 1/15/2022
为什么不直接检查是否真实?
1赞 Markus AO 1/15/2022
在你病情之前不是更容易吗?如果为 null/unset,请将其设置为 false。$body['variable'] ??= false

答: 暂无答案