无法使基本OR语句正常工作

时间:2015-07-22 15:03:58

标签: php

在我的PHP函数中,如果用户主持人,如果用户不是帖子作者等,我想return。请参阅以下内容基本陈述:

$mod = false;
$status = 'pending';
$currentuser = 22;
$author = 22;


if ( (!$mod) || ( ($status != 'pending') && ($currentuser != $author) )  ) {
        return;
}

因此,在此示例中,函数不应返回,因为$currentuser$author$status匹配。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

(!$mod)是真的。 if条件评估为true

你最终拥有:

if ( true || anotherCondition  ) {
    return;
}

在这种情况下,其他条件是什么并不重要。它评估为true

您的代码非常接近您的需求。

if ( (!$mod) && ($status != 'pending') && ($currentuser != $author) ) {
    // if the user is not a moderator AND
    // the status is not pending AND
    // the user is not the owner, then
    return;
}

答案 1 :(得分:0)

if( (!$mod) && ( ($status != 'pending') && ($currentuser != $author) ) )

因为用户不是mod,所以它会使if语句的后半部分短路,使其成为a而不是,或者仅当两个语句都为真时才会返回。

另一个选择是:

if(($mod) || ( ( ($status == 'pending') && ($current user == $author) ) ) {
    // do logic here
}
else {
    // user is not a mod and user is not the pending author
    return;
}