我认为有时我不需要使用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; 会在没有太多欢乐的情况下完成这一操作。
答案 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'”。如果其中任何一个为真,则代码将被执行。
让我们尝试一些测试用例:
基本上你所做的就是让一切都成真。你实际上要表达的是“子域名不是'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';
}