在PHP中,如果您有以下代码,$b是否会得到评估,因为$a会导致if语句返回false?
$a = false;
$b = true;
if ($a && $b) {
// more code here
}另外,如果$b确实得到了评估,那么是否曾经有过这样的情况: if语句的一部分可能不会被计算,因为处理器已经知道值为false?
发布于 2016-10-18 09:30:34
&&的计算一到达false条件就会停止。
这些(&&)是短路操作符,因此它们不会检查第二个条件是否正确(在or情况下)或假条件(在AND情况下)。
参考资料: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());发布于 2016-10-18 09:26:08
一旦结果已知为,就会停止逻辑表达式的计算。
如果$a为false,则不会对$b进行评估,因为它不会更改($a && $b)结果。
这样做的一个结果是,如果对$b的评估比对$a的评估需要更多的资源,那么使用$a启动测试条件。
但要注意
PHP没有(在一般情况下)指定计算表达式的顺序,应该避免采用特定计算顺序的代码,因为PHP的不同版本之间或取决于周围的代码,行为可能会发生变化。(源php文档)
因此,您不应该假设如果$b是假的,就不会对$a进行评估,因为将来可能会发生变化( php说)。
https://stackoverflow.com/questions/40104366
复制相似问题