3

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

例如,如果我有这样的查询:

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

它会在第一次查询成功与否时停止检查吗?

4

2 回答 2

8

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

验证见下面帖子: PHP短路懒评估,php.net手册在哪里?

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

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

于 2012-07-10T12:19:50.190 回答
6

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

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

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

于 2012-07-10T12:20:04.337 回答