逻辑运算符如何在三个布尔变量之间进行运算?

时间:2019-06-15 12:37:11

标签: php boolean logical-operators

我现在是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';
?>

结果页:enter image description here

1 个答案:

答案 0 :(得分:0)

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

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

但是PHP实际上在处理条件时会优化条件。在$c1 or $c2的情况下,如果$c1true,则$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: TRUE\n\n";
} else {
    echo "Result: FALSE\n\n";
}

if (($c(1) or $c(2)) and $c(3)) {
    echo "Result: TRUE\n\n";
} else {
    echo "Result: FALSE\n\n";
}

输出:

Call #1 
Result: TRUE 

Call #1 
Call #3 
Result: FALSE