逻辑运算符如何在三个布尔变量中操作



我现在是PHP的初学者,不精通程序逻辑,所以这个史诗般的代码真的让我感到困惑。

返回给我的

最终结果是"真假"。在我看来,结果应该是假的,因为"$b"和"$c"具有不同的值,因此它们不能满足条件"和"。

此外,如果是"$a"和"$b"首先作为一个组进行操作,则"$a或$b"的结果应该是"true",这也不等于$c。

多谢!

版本是PHP7

<?php
$a = true;
$b = true;
$c = false;
if($a or $b and $c)
echo 'true'." ";
else 
echo 'false';
?>

结果页面:在此处输入图像描述

如有疑问,请使用括号明确条件。这样以后更容易理解代码。

条件的顺序取决于操作员优先级,如果相同,则从左到右。

然而,PHP 实际上在处理条件时优化了条件。在$c1 or $c2的情况下,如果$c1 true$c2的值无关紧要,所以它不被验证。结果只能是true.$c1 and $c2也会发生同样的情况 - 如果$c1为假,则整体条件的结果只能是false .

因此,($a or $b and $c)($a or ($b and $c))的预期结果使用(($a or $b) and $c)相同。

下面是一个小脚本,允许您对其进行测试:

// a small function with some debug output
function createConditions(bool ...$values) {
    return function($callIndex) use ($values) {
        echo 'Call #', $callIndex, "n";
        return $values[$callIndex - 1] ?? false;
    };
}
$c = createConditions(true, true, false);
if ($c(1) or $c(2) and $c(3)) {
    echo "Result: TRUEnn";
} else {
    echo "Result: FALSEnn";
}
if (($c(1) or $c(2)) and $c(3)) {
    echo "Result: TRUEnn";
} else {
    echo "Result: FALSEnn";
}

输出:

Call #1 
Result: TRUE 
Call #1 
Call #3 
Result: FALSE

最新更新