给出下面的嵌套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语句更难以读取和维护。
当前处理此问题的最佳做法是什么?
答案 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条件的第二部分将不会被评估。