如果PHP中有两个连续的条件,它们是否都会被评估,或者如果第一个条件已经失败,那么if-case评估是否被取消(因此第二个条件的结果不重要)?
if (condition1 && condition2) { }
答案 0 :(得分:11)
PHP使用Short Circuit Evaluation,因此如果第一个条件为假,则第二个条件甚至不会被评估。
答案 1 :(得分:3)
由于您使用&&
,如果左侧条件失败,则不会评估正确的
if (statement1 && statement2)
{
//If the left part is false, the right part is not even checked
}
if (statement1 || statement2)
{
//if the left part is false, the right part is checked
}
答案 2 :(得分:2)
如果第一个条件的结果使得评估第二个条件变得不必要,那么PHP就不会对它进行评估(第二个条件)。这称为Short-circuit evaluation,这个术语在PHP's documentation on logical operators中也有意义。
这是一个证明它的小例子:
<?php
function foo() {
echo 'Bar';
return true;
}
if (false && foo()) { }
由于PHP使用短路评估,foo()
将不会被执行,因此屏幕上不会打印Bar
。
因为&#39;测试&#39;永远不会echo
,您可以得出结论,如果第一个条件返回false
,则永远不会评估第二个条件。
同样适用于||
(OR)运算符,但反过来说:
<?php
function foo() {
echo 'Bar';
return true;
}
if (true || foo()) { }
由于第一个条件已经是true
,因此无需评估第二个条件。同样,foo()
未执行,因此您将获得一个空屏幕。
答案 3 :(得分:1)
它是一个AND。而且PHP很懒惰。如果第一个函数返回false,则不会触及其他函数。与OR相同。如果你使用它,PHP是懒惰的,只在必要时进行评估。
if(condition1() || condition2())
如果condition1()
返回true
,则条件2将不受影响。很高兴知道性能,总是首先评估快速功能。^^