多个内联条件和OR与ELSEIF

时间:2009-03-04 23:07:32

标签: php

我认为有时我不需要使用ELSEIF,也不需要通过内联多次检查重复内容。

我以前做过这个。

我正在尝试这条简单的线条而且无法使其发挥作用。

我读到了:

OR与||

相同

AND与&&

相同

代码(简短但不起作用):

if($subdom<>'www' or $subdom<>'nosub')
{do some stuff if any of the two are meet}

我也试过这个:

代码:

if((subdom!='www') || ($subdom!='nosub')){}

检查这两个中的任何一个的正确操作符是什么?是吗||或者&amp;&amp;我们应该使用!=或&lt;&gt;也?

在回答问题后发现了一些信息:

  

$ a&amp;&amp; $ B
  //如果$ a和$ b都为TRUE,则为TRUE。

     

$ a || $ B
  //或者如果$ a或$ b为TRUE,则为TRUE。

其中任何一个都可以作为比较:

!== (不完全相同),但!= ,因为它意味着“不分配”
&lt;&gt; 会在没有太多欢乐的情况下完成这一操作。

6 个答案:

答案 0 :(得分:5)

你的表达式总是正确的,考虑到你的例子,用$ subdom的不同输入值检查表:

$ expr =($ subdom!='www')|| ($ subdom = 'NOSUB'!);

   $subdom      ($subdom!='www')      ($subdom!='nosub')      result
   ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    www      |      false           |        true         |     true  |
    nosub    |      true            |        false        |     true  |
    anything |      true            |        true         |     true  |
    blah!    |      true            |        true         |     true  |

我认为你想在这里使用AND(&amp;&amp;)运算符......

答案 1 :(得分:3)

你必须仔细考虑你想要表达的逻辑。

现在,您的逻辑说“如果子域不是'www'或子域不是'nosub'”。如果其中任何一个为真,则代码将被执行。

让我们尝试一些测试用例:

  • nosub :这不是“www”,所以条件为真,执行代码
  • 随机:这不是“www”或“nosub”,因此两个条件都为真,执行代码
  • www :这不是“nosub”,因此条件为true,执行代码

基本上你所做的就是让一切都成真。你实际上要表达的是“子域名不是'www'而它不是'nosub'”。也就是说,如果它不是那些,你想要执行代码。

正确的if语句为:if ($subd != 'nosub' && $subd != 'www')

如果您遇到此问题,最好更改您在if语句中输入逻辑的过程。以下是对如何构建它的描述。

首先,从你正在考虑“好”的条件开始。 “好”条件是“$ subd是'www'或'nosub'之一”。对此的if语句为:if ($subd == 'www' || $subd == 'nosub')

现在,您正在尝试编写代码来处理不好的情况,因此您需要采取相反的良好条件。要采用与布尔条件相反的方法,用NOT来包围整个事物。在代码中:if !($subd == 'www' || $subd == 'nosub') (请注意前面的感叹号)

如果你想在内部移动那个否定(正如你原本试图做的那样),它是布尔代数的一个属性(我希望这是一个正确的术语,我已经很长时间了解到这一点)当你将否定转换为这样的关系,你否定两个操作数,并将运算符从AND更改为OR,反之亦然。因此,在这种情况下,当您在括号内移动否定时,==变为!=||变为&&,结果为:if ($subd != 'www' && $subd != 'nosub),正如我上面给出的那样。

再次修改:我在上一段中提到的属性称为De Morgan's laws

答案 2 :(得分:2)

我想你会想要使用'和'而不是'或'。

在这两个条件上使用'或'将始终为true,因为字符串将始终不是其中一个值。

答案 3 :(得分:1)

这些运算符具有相同的语义,但具有不同的precedence

false &&  true or true    // = (false && true) or true  => true
false and true || true    // = false and (true || true) => false

答案 4 :(得分:0)

if是错误的,因为所有字符串都会通过检查。所有字符串都不是'www'或不是'nosub'。 因此,使用==通常比!=。

更好

答案 5 :(得分:0)

我猜你从你自己的子域传递像成员一样的东西,所以你需要以下

if(($dom == 'www') || ($dom == 'nosub'))
{
    echo 'go away';
}