在if语句中使用AND / OR

如何在其他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"); } 

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


两件事,虽然:

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

你有两个问题在这里。

  1. ==来比较。 你已经使用=哪个是分配。

  2. 使用&&为“和”和|| 为“或”。 and or将工作,但他们是非常规的。

有点晚,但不要紧
问题是“你如何使用…?” 简短的答案是你正在做的是正确的


另一个问题是“你什么时候用它?”
我使用&&而不是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 } 

这将返回“TRUE”,即使B仍然不是我们要求的值,还有另一种方法返回TRUE而不使用OR / || 这将是异或

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

在这种情况下,我们只需要我们的一个variables是真的,但不是两个,如果两个都是真的结果将是假的。

我希望这有帮助…

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

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

首先 ,正如一些人所指出的,你的代码中存在一个与这个问题相关的错误:

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

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

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

在这种情况下在function上等同于

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

其次 ,请注意,这些运算符( and or && || )是短路操作符。 这意味着如果答案可以从第一个expression式中确定,那么第二个expression式就不会被评估。 再次,这对你上面的debugging行不重要,但是当你将这些操作符与赋值相结合时,这是非常重要的,因为

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

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

 $e = false || true; 

将评估为true并将该值赋值给$e ,因为|| 具有比=更高的运算符优先级,因此它本质上是这样评估的:

 $e = (false || true); 

然而

 $e = false or true; 

将赋值为$e (然后执行or操作并评估为true ),因为=具有更高的运算符优先级, or本质上如此评估:

 ($e = false) or true; 

这个歧义甚至存在的事实使得很多程序员总是使用&& || 然后一切就像人们所期待的那样用C语言来工作, 首先逻辑运算,然后赋值。

像Perl这样的一些语言经常使用这种types的结构:

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

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

一些允许这种构造的语言直接禁止在条件/逻辑语句(比如Python)中的赋值来消除歧义。

PHP同时允许这两个,所以你只需要了解一下你的两个select,然后编码你想如何,但希望你会一直这样或那样的一致。

无论什么时候有疑问,只要引入一个额外的括号,这将消除所有的歧义。 这些将永远是一样的:

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

掌握所有这些知识,我更喜欢使用and or因为我觉得它使代码更具可读性。 我只是有一个规则,不要把任务和逻辑评估结合起来。 但是在这一点上,这只是一种偏好,在这里,一致性比你select的哪一方更重要。

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

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

它看起来ANDOR优先级比它们的C风格等价。

为和你使用

 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"); } 

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

你问在这种情况下使用哪一个? 如果是,那么是正确的答案

那么,如果你问运营商是如何工作的话

在PHP中, AND,&&OR,|| 将以相同的方式工作。 如果你是编程新手,php是你的第一种语言,我build议你使用AND和OR,因为它增加了可读性,并且在你回来时减less了混淆。 但是,如果您已经熟悉其他语言,那么您可能已经熟悉了&&和|| 运营商。

 <?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> 

ive用'&&'取代了'else',所以都放在… argh

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

服务器的版本可能?

“&&“ 工作正常。