【发布时间】:2016-10-18 09:23:41
【问题描述】:
在 PHP 中,如果您有以下代码,是否会评估 $b,因为 $a 会导致 if 语句返回 false?
$a = false;
$b = true;
if ($a && $b) {
// more code here
}
如果 $b 确实得到了评估,是否存在由于处理器已经知道该值为 false 而不评估 if 语句的一部分的情况?
【问题讨论】:
-
Iirc,不,评估将在 $a 处停止(并失败)。
-
php 的评估相当懒惰。由于 $a 为假,无论 $b 是什么,表达式都会为假,因此没有理由评估 $b。 (在手册和教程中广泛介绍,AFAICR)。此外,您可以使用回显某些内容并返回布尔值的函数来检查自己。
-
不,它不会被评估,因为它会短路。
-
还有 opcache 的情况下整个 if 没有被执行。
-
理论上,您不应该假设操作顺序,因为未来的版本可能会更改它并评估
$b,然后是$a。在实践中,每个人都已经假设$b没有被评估,所以这种变化是否会发生是值得怀疑的,所以就目前而言,$a被评估,如果它是错误的,那么整个if失败(没有评估$b)
标签: php if-statement operator-precedence