PHP如果执行

时间:2016-10-18 09:23:41

标签: php if-statement operator-precedence

在PHP中如果你有以下代码,$ b会被评估,因为$ a会导致if语句返回false吗?

$a = false;
$b = true;

if ($a && $b) {
  // more code here
}

如果$ b确实得到了评​​估,那么有些情况下if语句的一部分可能不会被评估,因为处理器已经知道该值是假的吗?

2 个答案:

答案 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文档)。