为了账号安全,请及时绑定邮箱和手机立即绑定

PHP:如何组合逻辑运算符

PHP:如何组合逻辑运算符

PHP
慕尼黑5688855 2021-11-26 14:43:04
我已经在一个网站上工作了一段时间,现在我主要在论坛上工作。在这里,我必须告诉 php 在某些条件下显示什么和不显示什么。我为此使用 IF,我也可以使用它,但是代码在我这样做的方式中变得混乱(堆叠 IF)。当我尝试组合逻辑运算符时,它不起作用。我知道你需要用括号做一些事情,但在这种情况下我不确定它们应该放在哪里。if (    isset($_SESSION['role']) && $_SESSION['role'] > 3 ||     isset($_SESSION['username']) && $_SESSION['username'] == $topic['author']):它只会采用第一个条件并忽略第二个条件
查看完整描述

2 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

将括号括在&&测试是否设置特定变量以及该值是否符合条件的表达式周围。

if ((isset($_SESSION['role']) && $_SESSION['role'] > 3) || 
    (isset($_SESSION['username']) && $_SESSION['username'] == $topic['author'])):

这些括号实际上并不是必需的,因为它们的&&优先级高于||. 但我建议在任何像这样的复杂条件下使用括号,以明确意图。

请注意,||如果任一操作数为真,则条件为真。所以如果role > 3,它会忽略第二个条件。如果username == author,则忽略第一个条件。

如果您不想忽略任一条件,则应使用&&而不是||.


查看完整回答
反对 回复 2021-11-26
?
HUX布斯

TA贡献1876条经验 获得超6个赞

它只会采用第一个条件并忽略第二个条件


当您有一个if堆叠多个条件的语句时


if (

    -- condition 1 -- ||

    -- condition 2 -- ||

    -- etc --

) {

当条件首先通过时,它将进行进一步检查。


例如


如果我们有这个$posted数组


[

    'user' => 'treybake',

    'name' => null

]

并使用这个 if


if (

    !empty($_POST['user']) && $_POST['user'] !== 0 || 

    !empty($_POST['name'])

) {

    echo 'hello, world';

}

我们将看到输出


你好,世界


这是因为检查$_POST['user']通过了。请记住,||是OR-他们既不必是真实的,只有一个能行得通。


如果要构建必需检查的条件,请使用&&( AND)。


但是,我实际上认为这种情况最好单独进行 if 检查 - 更易于阅读和维护,并且不太可能出错。


查看完整回答
反对 回复 2021-11-26
  • 2 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信