在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
两件事,虽然:
- 许多程序员更喜欢
&&
和||
而不是and
和or
,但他们工作相同(安全的优先)。 -
$status = 'clear'
应该是$status == 'clear'
。=
是赋值,==
是比较。
你有两个问题在这里。
-
用
==
来比较。 你已经使用=
哪个是分配。 -
使用
&&
为“和”和||
为“或”。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.
AND
和OR
只是&&
和||
语法糖 ,就像使用JavaScript或其他C风格的语法语言一样。
它看起来AND
和OR
优先级比它们的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代码中不起作用。
服务器的版本可能?
“&&“ 工作正常。