我该用什么&&或||

时间:2012-03-01 09:29:53

标签: php if-statement

这是我的代码

<?php

if( $_SERVER['REQUEST_URI']!="/index.php?task=join&" || $_SERVER['REQUEST_URI']!="/index.php?task=join&step=1" 
|| $_SERVER['REQUEST_URI']!="/index.php?task=join&step=2" ) {
    include ("inc/js/script.php");
}

?>

我需要说&#34;如果REQUEST_URI!= /index.php?task=join& &#39;或&#39; /index.php?task=join&step=1'或&#39; /index.php?task=join&step=2&gt;&gt;&gt;包括inc / js / script.php

当我使用&amp;&amp;它工作正常,但我认为正确的答案应该是||

请问有什么不对?

6 个答案:

答案 0 :(得分:3)

听起来像你想要&#34; AND&#34; - 或者你可以改变它的意义:

if (! (uri == first || uri == second || uri == third) )

如果您考虑一下,URI就不能同时为&#34; /index.php?task = join&amp;&#34; &#34; /index.php?task = join&amp; step = 1&#34;,所以它必须不等于一个 - 所以使用{{1在当前代码中,总是返回true。

答案 1 :(得分:2)

||表示or&&表示and。如果or符合您的要求,请使用||

但是,如果您使用||,则条件将始终评估为true,因为$_SERVER['REQUEST_URI']将始终与"/index.php?task=join&""/index.php?task=join&step=1"不同,因为它不能同时存在。

所以我认为您实际上正在寻找and条件 - &&

此外,您应该使用strcmp进行字符串比较。

答案 2 :(得分:1)

答案是&&因为您希望它是AND,因为您将相同变量 不等于与不同的值进行比较。

您希望变量为not this, not that, *AND* not the other

如果它使用OR||),则允许它们中的一个,但只要它不是全部(显然不可能)。< / p>

答案 3 :(得分:1)

如果我理解你想要的东西: 我建议使用$ _GET并按照这样做:

<?php
 if ($_SERVER["PHP_SELF"] == "/index.php" && $_GET['task'] == "join" && (isset($_GET['step'] && ($_GET['step'] == 1 || $_GET['step'] == 2)))
 include_once("inc/js/script.php");



?>

答案 4 :(得分:1)

您对自己想做的事情的英文描述很好,但是当您开始编码时,就会出现翻译错误。

以下是您想要的行为:

  

如果REQUEST_URI!= /index.php?task=join& '要么'   /index.php?task=join&step=1'或'/index.php?task=join&step=2&gt;&gt;&gt;   包括inc / js / script.php

当你这样说时,很明显“not”(!in!=)适用于所有的URI。因此,让我们分析NOT并使用括号表示它适用于所有内容:

  

如果不是(REQUEST_URI = /index.php?task=join&'或'   /index.php?task=join&step=1'或'/index.php?task=join&step=2)>&gt;&gt;   包括inc / js / script.php

现在让我们从英语到近代码,我们只需要更完整地解释一下:

if ! (REQUEST_URI == /index.php?task=join& or
        REQUEST_URI == /index.php?task=join&step=1 or
        REQUEST_URI == /index.php?task=join&step=2) 
    include inc/js/script.php

这实质上是Jon Skeet提出的解决方案。

进一步说明,如果您将|| s更改为&amp;&amp; s,那么这就是您的代码有效的原因。你基本上重新发现了一个众所周知的逻辑规则,称为De Morgan定律(在Salman A的评论中提到),它有两种形式(其中“&lt; ==&gt;”表示“当且仅当”):

  1. !(A || B)&lt; ==&gt; !A&amp;&amp; !乙
  2. !(A&amp;&amp; B)&lt; ==&gt; !A || !乙
  3. 根据De Morgan定律的表格1,上述代码与

    相同
    if (!REQUEST_URI == /index.php?task=join& and
            !REQUEST_URI == /index.php?task=join&step=1 and
            !REQUEST_URI == /index.php?task=join&step=2) 
        include inc/js/script.php
    

    相同
    if (REQUEST_URI != /index.php?task=join& and
            REQUEST_URI != /index.php?task=join&step=1 and
            REQUEST_URI != /index.php?task=join&step=2) 
        include inc/js/script.php
    

答案 5 :(得分:0)

您是否希望请求uri:

a)不等于任何这些东西(&amp;&amp;)

b)不等于这些事物中的一个或多个(或所有)(||)

你想&amp;&amp;我怀疑。