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评估所有内容,而不管真假结果如何。

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

目前处理这个问题的最佳做法是什么?


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

PHP使用&&运算符的短路评估。 也就是说,如果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";
  }
?>

这将仅回显一行(“评估为false的语句”),而不是“Hey there!”,因为if条件的第二部分不会被评估。

链接地址: http://www.djcxy.com/p/26619.html

上一篇: How does PHP evaluate compound if statements?

下一篇: PHP isset returns true but should be false