PHP如何评估复合if语句?

时间:2016-09-17 19:55:34

标签: php

给出下面的嵌套if语句:

if(file_exists($fullPathToSomeFile)) {
    if(is_readable($fullPathToSomeFile)) {
        include($fullPathToSomeFile);
    }
}

这与以下方面有何不同:

if(file_exists($fullPathToSomeFile) &&  is_readable($fullPathToSomeFile)) {
    include($fullPathToSomeFile);
}

具体来说,我想知道如果$ fullPathToSomeFile不存在,PHP将如何处理is_readable()(第一个条件失败)。

在某些时候,我开始嵌套这些,因为使用单行版本在某些情况下会抛出错误。在我看来,使用任何'和'无论真/假结果如何,都会要求PHP评估所有内容。

我真正想要的是让它在达到第一个错误时停止评估,从而在条件失败时防止警告或致命错误。嵌套(第一个示例)可以保证这一点,但嵌套的if语句更难以读取和维护。

当前处理此问题的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

  

具体来说,我想知道如果$ fullPathToSomeFile不存在,PHP将如何处理is_readable()(第一个条件失败)。

PHP对&&运算符使用short-circuit evaluation。也就是说,如果像if (A && B)这样的表达式中的第一个条件失败,很明显整个条件都是错误的。因此,不需要评估第二条件B以确定结果,并且根本不进行评估。

以下面的代码为例:

<?php
  function hey()
  {
    echo "Hey there!\n";
    return true;
  }

  if (false && hey())
  {
    echo "Statement evaluated to true.\n";
  }
  else
  {
    echo "Statement evaluated to false.\n";
  }
?>

这将只回显一行(“Statement evaluate to false。”),但不是“Hey there!”,因为if条件的第二部分将不会被评估。