php if and,在if语句中使用AND / OR

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

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

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的哪一方更重要。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值