PHP 和逻辑运算符?

PHP and logical operators?

我目前正在为我的论坛写我自己的许可 class,我 运行 遇到了一个我真正能理解的小问题。

我有以下功能:

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 是版主)。

这没问题。只有主题的所有者以及管理员和管理员可以编辑。但是,如果我将版主的 $perm_edit_topic 设置为 FALSE,他们仍然可以编辑它。

我的 IF 陈述是否有误?

将您的条件替换为:

$perm_edit_topic && ($user_id == $my_id || $permission == 0 || $permission == 1)
  • $perm_edit_topic == true$perm_edit_topic

  • 的含义完全相同
  • 将所有其他条件包裹在括号内以控制短路,这种与'ing、or'ing 和xor'ing 的组合如何工作是非常不直观的。如果您不熟悉短路,请尝试 运行 这个例子:Does PHP have short-circuit evaluation?

  • 在括号内,任何条件为真都足以使整个表达式为真。 $permission == 0$permission == 1 都不能为真,异或它们没有意义