我的网站需要登录才能根据用户建立权限.在网站的照片列表中,如果用户只有访客访问权限,我必须确定是否会显示特定的照片.所以我认为这个if else语句会起作用:
if (!($mysql_row['guest_access'] == 'NO') AND ($_SESSION['user_level'] == 'GUEST')) {
// show the photo if it isn't private and the user isn't a guest
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.
但是,如果我将此测试分成三行,那么它的工作正常.
$is_private_photo = $mysql_row['guest_access'] == 'NO';
$is_guest = $_SESSION['user_level'] == 'GUEST';
$both_private_and_guest = ($is_private_photo AND $is_guest);
if (!$both_private_and_guest) {
// show the photo if it isn't private and the user isn't a guest
Run Code Online (Sandbox Code Playgroud)
第一个版本有什么问题?
你的第一个是
if (!($mysql_row['guest_access'] == 'NO') AND ($_SESSION['user_level'] == 'GUEST'))
Run Code Online (Sandbox Code Playgroud)
这实际上是这样解释的:
if (
(!($mysql_row['guest_access'] == 'NO'))
AND ($_SESSION['user_level'] == 'GUEST')
)
Run Code Online (Sandbox Code Playgroud)
该!只适用于第一个条件,而不是两个,因为它的优先级比更高级别的AND(见运算符优先级)
您的病情可能应该用一些额外的括号重写:
if (!(($mysql_row['guest_access'] == 'NO') AND ($_SESSION['user_level'] == 'GUEST')))
Run Code Online (Sandbox Code Playgroud)
因此!适用于整个条件.