【问题标题】:Does PHP stop looking after one 'or' (||) is met?PHP是否停止寻找一个'或'(||)被满足?
【发布时间】:2012-07-09 22:03:16
【问题描述】:

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

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

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

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

【问题讨论】:

  • 当你用 2 个已知值尝试它时发生了什么?
  • 是的,如果第一个查询返回可以评估为true的内容,它将停止
  • 你意识到每个查询的成功意味着运行没有错误,而不是它是否真的返回数据......但是像这样执行数据库查询并不是一个好的做法
  • 我支持@MarkBaker:这有很多问题。您的示例代码未通过几个“最佳实践”测试。您也许可以使代码更短,但您也会降低代码质量。 $shorter !== $better.

标签: php if-statement


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-12-05
      • 1970-01-01
      • 2020-11-20
      • 2022-11-18
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多