我不明白这一点。如果设置$ _GET [' action']且操作不是"登录"是否"消息"我想做动作()。
我的非工作代码:
if ( isset($_GET['action']) && ($_GET['action'] !== "login" || $_GET['action'] !== "messages") ) {
doAction();
}
如果我删除了||它有效。
if ( isset($_GET['action']) && ($_GET['action'] !== "login") ) {
doAction();
}
任何提示?
答案 0 :(得分:0)
您正在使用“not equals”运算符(!==
)。如果您要测试值是 login
还是messages
,则应使用==
运算符:
if ( isset($_GET['action']) &&
($_GET['action'] == "login" || $_GET['action'] == "messages") ) {
doAction();
}
答案 1 :(得分:0)
if ( isset($_GET['action']) &&
($_GET['action'] !== "login" || $_GET['action'] !== "messages") ) {
doAction();
}
答案 2 :(得分:0)
当使用||在PHP中测试条件时,PHP将按照它们编写的顺序测试条件,如果其中一个条件为真,则整个条件求值为true。这意味着,对于您的代码,如果$ _GET [' action']的值为' message',则条件将评估为true:
if ( isset($_GET['action']) && ($_GET['action'] !== "login" || $_GET['action'] !== "messages") ){
doAction();
}
因为当口译员评估$ _GET [' action']!==" login"并且$ _GET [' action']的值是'消息',该评估的结果为真,因此将执行if块中的代码。我建议您将代码更改为:
if ( isset($_GET['action']) && ($_GET['action'] !== "login" && $_GET['action'] !== "messages") ){
doAction();
}
||改为&&这意味着$ _GET [' action']的值不能是' login'它不能是'消息'。
答案 3 :(得分:0)
好的,让我们检查你的if
声明的执行情况:
isset($_GET['action'])
true 和$_GET['action'] !== "login"
true 由于php有延迟执行(true
且true
为true
),比较停止了,doAction
执行,很好,正是我们需要的。
假设,操作登录
然后isset($_GET['action'])
true 和$_GET['action'] !== "login"
false 且$_GET['action'] !== "messages"
为真(因为登录绝对不是的消息强>)。所以(true
和(false
或true
))是true
!
最后假设,操作是消息
然后isset($_GET['action'])
true ,$_GET['action'] !== "login"
true 。考虑到延迟执行,doAction
再次运行。
好!看起来doAction
将始终有效!
问题的解决方法是and (&&)
or (||)
代替if
if (isset($_GET['action'])
&& ($_GET['action'] !== "login" && $_GET['action'] !== "messages") )
// that should work properly!