PHP是否会停止照顾一个'或'(||)?

时间:2012-07-10 12:16:44

标签: php if-statement

一个简单的问题,可以消除对大量if/else语句的需求。

例如,如果我有这样的疑问:

if ($success1=$db->query('SELECT * FROM `foo`;') || $success2=$db->query('SELECT * FROM `bar`;')) {
   ...
}

是否会在第一次查询成功时停止检查?

2 个答案:

答案 0 :(得分:8)

你所指的是短路。是的PHP使用短路。使用AND(&&)如果条件中的第一次检查失败,它永远不会检查第二次。这同样适用于OR(||)。如果第一次检查成功,它永远不会查看第二个语句。

请参阅以下帖子进行验证: PHP short circuit lazy evaluation, where is it in the php.net manual?

这个非常有用的一个例子是除以零。在第一次检查中,您确定分母是否为零,然后在第二次检查中进行分割。订单很重要。如果分母为零,它将跳过第二次检查,并且永远不会除以零。

if($x != 0 && 10/$x > 3)

答案 1 :(得分:6)

如果第一个是真的,那么它将不需要检查语句中的任何其他内容,因此它将继续。如果没有,代码如下:

if(isset($var) && $var == 1)

永远不会起作用,因为它会抛出未定义的错误。一旦它看到第一个是假的,它就会停止声明的其余部分。