正如其他人所说,您需要小心使用布尔逻辑 -
(NOT X) || (NOT Y)
等同于
NOT (X AND Y)
,而您想要的是
NOT (X OR Y)
,它等同于
(NOT X) AND (NOT Y)
。
对于这种特定情况,还有另外几个选择,虽然没有您尝试的无效语法那么简洁。
首先,有一个名为
in_array()
的函数,易于阅读,但如果您经常使用具有长列表的函数,则效率不高(对于像这样的简单情况,不值得担心性能):
$allowed_users = array('test1', 'user');
if ( ! in_array($_SESSION['usrName'], $allowed_users ) { ... }
或者,你可以使用用户名作为键构建一个哈希表;随着列表的增长,这种方法更加高效,因为PHP可以在不遍历整个列表的情况下检查键:
$allowed_users = array('test1' => true, 'user' => true);
if ( ! array_key_exists($_SESSION['usrName'], $allowed_users) ) { ... }
// Or, if you don't mind PHP raising a few notices about accessing undefined keys
if ( ! $allowed_user[ $_SESSION['usrName'] ] ) { ... }
最后,您可以使用带有标签的switch
语句,并使其具有“穿透”效果,而default
案例则充当“其他情况”:
switch ( $_SESSION['usrName'] )
{
case 'test1':
case 'user':
break;
default:
header('location:login.php');
}
这些技巧与代码未来的增长有关,你可以根据需要选择使用其中的任何一个。这些技巧非常实用易懂。
test1
或不等于user
。 - Mike Brant