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

met*_*lah 67 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");
} 
Run Code Online (Sandbox Code Playgroud)

2)或

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

dec*_*eze 117

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


但有两件事:

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

  • 只是为了完成,`===`用于类型+值比较.在将来,PHP还将包含`====`以检查类是由同一个程序员编写的,`=====`以确保它们是在同一天编写的,并且`===== =`以确保程序员当时穿着裤子. (121认同)
  • @deceze:不穿裤子是互联网上一些最受欢迎的网站的商业模式的核心.;) (26认同)
  • @AgentConundrum:我是否能够使用`!=====`如果我想确保程序员*不穿*裤子? (24认同)
  • @Agent我会添加`=============`以确保自编写代码以来项目规范没有改变. (21认同)
  • @deceze - 好的,但只有它总是返回`FALSE` (8认同)
  • @Asaph`if($ foo!===== $ bar)die(); //可以*你*相信一个无裤的人写这个关键的代码吗?` (4认同)

Tan*_*ker 13

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


另一个问题是"你何时使用它?"
我使用&&的,而不是AND||代替OR.

$a = 1
$b = 3
Run Code Online (Sandbox Code Playgroud)

现在,

if ($a == 1 && $b == 1) { TRUE } else { FALSE }
Run Code Online (Sandbox Code Playgroud)

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

if ($a == 1 || $b == 1) { TRUE } else { FALSE }
Run Code Online (Sandbox Code Playgroud)

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

if ($a == 1 xor $b == 1) { TRUE } else { FALSE }
Run Code Online (Sandbox Code Playgroud)

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

我希望这有帮助...

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


red*_*ard 11

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

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

if ($status = 'clear' AND $pRent == 0)
Run Code Online (Sandbox Code Playgroud)

应该(注意==而不是=在第一部分):

if ($status == 'clear' AND $pRent == 0)
Run Code Online (Sandbox Code Playgroud)

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

if ($status == 'clear' && $pRent == 0)
Run Code Online (Sandbox Code Playgroud)

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

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

PHP逻辑运算符页面中的修改示例:

$e = false || true;
Run Code Online (Sandbox Code Playgroud)

将评估true并将该值赋值给$e,因为它||具有更高的运算符优先级=,因此它实际上的计算结果如下:

$e = (false || true);
Run Code Online (Sandbox Code Playgroud)

然而

$e = false or true;
Run Code Online (Sandbox Code Playgroud)

将分配false$e(然后执行or操作和评估true)因为=具有更高的运算符优先级or,基本上像这样评估:

($e = false) or true;
Run Code Online (Sandbox Code Playgroud)

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

像Perl这样的语言经常使用这种类型的格式:

$connection = database_connect($parameters) or die("Unable to connect to DB.");
Run Code Online (Sandbox Code Playgroud)

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

一些允许这种结构的语言直接禁止条件/逻辑语句(如Python)中的赋值,以反过来消除歧义.

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

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

$e = (false || true);
$e = (false or true);
Run Code Online (Sandbox Code Playgroud)

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


Asa*_*aph 9

你有2个问题.

  1. 使用==进行比较.你用过=哪个用于作业.

  2. 使用&&了"与"和||为"或".and并且or将工作,但他们是标新立异.


Dan*_* D. 7

AND &&和OR ||就像在C.


ale*_*lex 5

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

它的优先级似乎低于CAND风格OR的等效项。