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
都不能为真,异或它们没有意义
我目前正在为我的论坛写我自己的许可 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
都不能为真,异或它们没有意义