Php 为什么(false和false或true)返回true
Php 为什么(false和false或true)返回true,php,operators,operator-precedence,Php,Operators,Operator Precedence,(false和false | | true)按预期返回false var_dump(false and false || true); // result: bool(false) 但是(false和false或true)返回true。我无法从逻辑上解释为什么会发生这种情况。&&和|的优先级高于和或 您可以在PHP文档中看到 所以 查看 当我们按优先级对运算符进行排序时,它是: <?php var_dump(false and false || true); // eq: false
(false和false | | true)
按预期返回false
var_dump(false and false || true);
// result: bool(false)
但是
(false和false或true)
返回true。我无法从逻辑上解释为什么会发生这种情况。&&
和|
的优先级高于和或
您可以在PHP文档中看到
所以
查看
当我们按优先级对运算符进行排序时,它是:
<?php
var_dump(false and false || true);
// eq: false and (true or false) => false
var_dump(false and false or true);
// eq: (false and false) or true => true
这就是你问题的答案<代码>|
的优先级高于和
我假设您只使用一种“类型”的逻辑运算符,使用&&
和|
或和或。不要将它们组合起来。即使逻辑上|
和或是相同的,它们的前导也不相同
|
的优先级高于或
,因此在您的两条语句中对它们的解释不同。我想如果你在周围加上一个括号,结果会是一样的:
&& > || > AND > OR
或
更多我想首先要看的是手册。这里有关于感谢的明确解释。我的脑子里刚刻下这样一个字:|
和或出于某种原因是等价的
&& > || > AND > OR
(false and (false || true));
(false and (false or true));