在if else PHP语句中使用AND / OR

时间:2010-12-10 04:55:46

标签: php if-statement

如何在if else PHP语句中使用'AND / OR'?它会是:

1)AND

if ($status = 'clear' AND $pRent == 0) {
    mysql_query("UPDATE rent 
                    SET dNo = '$id', 
                        status = 'clear', 
                        colour = '#3C0' 
                  WHERE rent.id = $id");
} 

2)或

if ($status = 'clear' OR $pRent == 0) {
    mysql_query("UPDATE rent 
                    SET dNo = '$id', 
                        status = 'clear', 
                        colour = '#3C0' 
                  WHERE rent.id = $id");
} 

10 个答案:

答案 0 :(得分:107)

是。答案是肯定的。
http://www.php.net/manual/en/language.operators.logical.php


但有两件事:

  • 许多程序员更喜欢&&||而不是andor,但它们的工作方式相同(优先级安全)。
  • $status = 'clear'应该是$status == 'clear'=是作业,==是比较。

答案 1 :(得分:12)

有点晚但无所谓......
问题是“你怎么用......?”简短的回答是你做得对吗

<小时/> 另一个问题是“你什么时候使用它?” 我使用&&代替AND||代替OR

$a = 1
$b = 3

现在,

if ($a == 1 && $b == 1) { TRUE } else { FALSE }

在这种情况下,结果为“FALSE”,因为B不是1,现在如果

if ($a == 1 || $b == 1) { TRUE } else { FALSE }

即使B仍然不是我们要求的值,这将返回“TRUE”,还有另一种方法可以在不使用OR / ||的情况下返回TRUE那将是XOR

if ($a == 1 xor $b == 1) { TRUE } else { FALSE }

在这种情况下,我们只需要我们的一个变量为真,但如果两者都为TRUE,那么结果将为FALSE。

我希望这会有所帮助......

更多内容:
http://www.php.net/manual/en/language.operators.logical.php

答案 2 :(得分:11)

这里有一些开玩笑和误导性的评论,甚至是部分不正确的信息。我想尝试改进它们:

首先,正如有人指出的那样,您的代码中存在与问题相关的错误:

if ($status = 'clear' AND $pRent == 0)

应该是(请注意第一部分中的==而不是=):

if ($status == 'clear' AND $pRent == 0)

在这种情况下 在功能上等同于

if ($status == 'clear' && $pRent == 0)

第二,请注意这些运算符(and or && ||)是短路运算符。这意味着如果可以从第一个表达式确定地确定答案,则永远不会评估第二个答案。对于上面的调试行,这也无关紧要,但在将这些运算符与赋值组合时非常重要,因为

第三次and or&& ||之间的真正区别在于他们operator precedence。具体而言,重要的是&& ||具有比赋值运算符(= += -= *= **= /= .= %= &= |= ^= <<= >>=)更高的优先级,而and or具有比赋值运算符更低的优先级。因此,在一个结合使用赋值和逻辑评估的陈述中,你选择哪个是重要的。

来自PHP's page on logical operators的修改示例:

$e = false || true;

将评估为true并将该值分配给$e,因为||的运算符优先级高于=,因此它的计算结果如下:

$e = (false || true);

然而

$e = false or true;

会将false分配给$e(然后执行or操作并评估true),因为=的运算符优先级高于or ,基本上这样评价:

($e = false) or true;

这种模糊性甚至存在的事实使得许多程序员总是使用&& ||然后一切都清楚地像C语言那样,即。首先是逻辑运算,然后是赋值。

像Perl这样的语言经常使用这种类型的结构:

$connection = database_connect($parameters) or die("Unable to connect to DB.");

这理论上会将数据库连接分配给$connection,或者如果失败(我们在这里假设函数将返回在这种情况下评估为false的内容),它将结束带有错误消息的脚本。由于短路,如果数据库连接成功,则永远不会评估die()

允许此构造的某些语言直接禁止在条件/逻辑语句(如Python)中进行分配,以反过来消除歧义。

PHP允许两者兼容,所以你只需要了解一下你的两个选项,然后编写你喜欢的代码,但希望你会以这样或那样的方式保持一致。

每当有疑问时,只需输入一组额外的括号,即可消除所有歧义。这些将永远是相同的:

$e = (false || true);
$e = (false or true);

拥有所有这些知识,我更喜欢使用and or,因为我觉得它使代码更具可读性。我只是有一条规则,不将任务与逻辑评估结合起来。但在这一点上,这只是一种偏好,而且这里的一致性比你选择哪一方要重要得多。

答案 3 :(得分:9)

这里有2个问题。

  1. 使用==进行比较。您已使用=进行分配。

  2. &&用于“和”,将||用于“或”。 andor会有效,但它们是非常规的。

答案 4 :(得分:6)

AND是&&,OR是||,就像在C中一样。

答案 5 :(得分:4)

ANDOR只是&&||的语法糖,就像JavaScript或其他C风格的语法语言一样。

它比它们的C风格等价物appears AND and OR have lower precedence

答案 6 :(得分:2)

对于你使用

if ($status = 'clear' && $pRent == 0) {
    mysql_query("UPDATE rent SET dNo = '$id', status = 'clear', colour = '#3C0' WHERE rent.id = $id");
} 
对于你使用

if ($status = 'clear' || $pRent == 0) {
    mysql_query("UPDATE rent SET dNo = '$id', status = 'clear', colour = '#3C0' WHERE rent.id = $id");
} 

答案 7 :(得分:0)

我想我在这里有点困惑。 :)但似乎没有其他人有..

您是在问这个场景中使用哪一个?如果是,那么并且是正确答案

如果您询问运营商的运作方式,那么

在php中, AND,&amp;&amp; OR,|| 将以相同的方式工作。如果你是编程新手,php是你的第一种语言之一,我建议使用AND和OR,因为它可以增加可读性并减少你回来时的混乱。但如果你已经熟悉其他任何语言,那么你可能已经熟悉了&amp;&amp; amp;和||运算符。

答案 8 :(得分:0)

<?php
$val1 = rand(1,4); 
$val2=rand(1,4); 

if ($pars[$last0] == "reviews" && $pars[$last] > 0) { 
    echo widget("Bootstrap Theme - Member Profile - Read Review",'',$w[website_id],$w);
} else { ?>
    <div class="w100">
        <div style="background:transparent!important;" class="w100 well" id="postreview">
            <?php 
            $_GET[user_id] = $user[user_id];
            $_GET[member_id] = $_COOKIE[userid];
            $_GET[subaction] = "savereview"; 
            $_GET[ip] = $_SERVER[REMOTE_ADDR]; 
            $_GET[httpr] = $_ENV[requesturl]; 
            echo form("member_review","",$w[website_id],$w);?>
        </div></div>

我用'&amp;&amp;'取代了'else'所以两个都放在...... argh

答案 9 :(得分:-1)

“AND”在我的PHP代码中不起作用。

服务器的版本可能吗?

“&安培;&安培;”工作正常。