给定下面嵌套的if语句:
if(file_exists($fullPathToSomeFile)) {
if(is_readable($fullPathToSomeFile)) {
include($fullPathToSomeFile);
}
}
这与
有什么不同?if(file_exists($fullPathToSomeFile) && is_readable($fullPathToSomeFile)) {
include($fullPathToSomeFile);
}
具体来说,我想知道如果$fullPathToSomeFile不存在(第一个条件失败),PHP将如何处理is_readable()。
在某些时候,我开始嵌套这些,因为使用单行版本在某些条件下会抛出错误。在我看来,使用任何'and'将要求PHP评估所有内容,而不管true/false结果。
我真正想要的是当它到达第一个false时停止计算,从而在条件失败时防止警告或致命错误。嵌套的(第一个例子)保证了这一点,但是嵌套的if语句更难阅读和维护。
当前处理此问题的最佳实践是什么?
具体来说,我想知道如果$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";
}
?>
这将只回显一行("Statement evaluate to false."),但不会回显"Hey there!",因为if条件的第二部分不会被求值。