在PHP中如果你有以下代码,$ b会被评估,因为$ a会导致if语句返回false吗?
$a = false;
$b = true;
if ($a && $b) {
// more code here
}
如果$ b确实得到了评估,那么有些情况下if语句的一部分可能不会被评估,因为处理器已经知道该值是假的吗?
答案 0 :(得分:4)
&&
的评估一旦达到false
条件就会停止。
这些(&&
)是短路操作符,因此如果第一个为真(如果是OR)或为假(如果是AND),则它们不会检查第二个条件。 / p>
参考:http://php.net/manual/en/language.operators.logical.php
来自文档:
<?php
// --------------------
// foo() will never get called as those operators are short-circuit
$a = (false && foo());
$b = (true || foo());
$c = (false and foo());
$d = (true or foo());
答案 1 :(得分:1)
只要结果已知 ,就会停止对逻辑表达式的评估。
如果$a
为false,则不会对$b
进行评估,因为它不会更改($a && $b
)结果。
这样做的结果是,如果$b
的评估需要的资源多于$a
的评估,请使用$a
启动测试条件。
但请注意:
PHP不(在一般情况下)指定表达式的评估顺序,并且应该避免采用特定评估顺序的代码,因为行为可以在PHP版本之间或根据周围代码进行更改。 (Source php docs)
因此,如果$b
为false,则不应该假设$a
永远不会被评估,因为它可能在将来发生变化(说明php文档)。