PHP和逻辑运算符?

时间:2015-06-14 17:54:38

标签: php logical-operators

我目前正在为我的论坛编写自己的权限类,并且遇到了一个我真正能理解的小问题。

我有以下功能:

function editTopic($perm_edit_topic, $id, $user_id, $my_id, $permission){

  if($perm_edit_topic == true && $user_id == $my_id OR $permission == 0 XOR $permission == 1){ 

        echo '<a href="/forum/newtopic.php?edit='.$id.'" class="buttonPro" data-toggle="tooltip" data-placement="top" title="Edit"><i class="fa fa-pencil-square-o fa-fw"></i></a>'; 

  } 

}

我希望IF语句执行以下操作:

如果$perm_edit_topic设置为TRUE且$user_id(主题中存储的user_id)是查看用户的用户ID,或者权限ID为0或者1(其中0表示管理员,1表示主持人)。

这没关系。只有主题的所有者以及admin和mods才能进行编辑。但是,如果我为主持人设置$perm_edit_topicFALSE,他们仍然可以对其进行编辑。

我在IF声明中做错了什么?

1 个答案:

答案 0 :(得分:1)

用这个替换你的情况:

$perm_edit_topic && ($user_id == $my_id || $permission == 0 || $permission == 1)
  • $perm_edit_topic == true$perm_edit_topic具有完全相同的含义

  • 将括号内的所有其他条件包裹起来以控制短路,它与“和”,“或”和“xor”的组合如何工作是非常不直观的。如果您不熟悉短路,请尝试运行此示例:Does PHP have short-circuit evaluation?

  • 在括号内,任何条件为真都足以使整个表达式成立。 $permission == 0$permission == 1都不可能是真的,对它们来说没有意义