PHP表达式计算为错误的(?)值

PHP表达式计算为错误的(?)值,php,Php,为什么在下面的代码段中变量$strange的计算结果为true $strange = true and false; var_dump($strange); // true PHP中的和和或的运算符优先级低于&和|。您的代码被评估为 ($strange = true) and false; 这两种方法本可以奏效: $strange = true && false; $strange = (true and false); 和是和&的低版本 $strange = true a

为什么在下面的代码段中变量
$strange
的计算结果为
true

$strange = true and false;
var_dump($strange); // true

PHP中的
的运算符优先级低于
&
|
。您的代码被评估为

($strange = true) and false;
这两种方法本可以奏效:

$strange = true && false;
$strange = (true and false);
和&
的低版本

$strange = true and false;
相当于

($strange = true) and false;
你想要

$strange = (true and false);
还是更合适

$strange = true && false;

在流控制语句之前(如
break
return
之前)最好保留

foo()
   or throw new Exception('foo() returned an error.');
见:


上面的例子直接从这里开始,与您的问题完全匹配。

我不是PHP专家,但这似乎是一个逻辑简单的问题。。。 表达式
var\u dump($奇怪)计算并输出第一个参数。

如下所示:



因此,
false
将被忽略。

不被忽略。只是解析/执行方式与OP预期的不同。这是直接从文档中复制和粘贴的。不是说你错了,如果我不能相信他们,我该相信谁呢?更像是措辞不当。这是不容忽视的。它是执行的,但由于
的结果没有分配到任何地方,这相当于禁止操作。请不要简单地从外部站点复制代码,请解释。您的编辑仍然不能满足“不复制代码,没有解释”堆栈溢出问题的要求。@ ZyBOxFixy,我会考虑“常数TRUE被分配到$H,然后执行FALSE,并且它的值与赋值的结果一致。充分的解释
&&
的更高优先级版本。您的代码将输出
false
,而不是true。哎呀,我说过我不是PHP专家;)。修正了。@MarcB你知道到目前为止这个问题的每个答案都是错误的,包括我的,对吗?意识到他们不想要一个“正确的代码”,他们只是想要一个解释为什么会发生这种情况。现在否决投票的原因,我给出了正确的答案?我用其中一些答案进行了测试;它们都返回
bool(false)
@zyboxinternational这不是我看到的:您有
短路
操作员(正如我在回答中所证明的)。我们这里似乎有人喜欢投票否决所有答案,却不知道@没错。当我编辑我的答案时,投票计数变为0,然后当我完成编辑时,它又回到了
-1
。为什么要投否决票?如果有问题,让我知道它是什么,这样我就可以解决它。我想这里有一些连续的向下投票。有人向下投票给每个人。不知道为什么。
只有在第一个操作数为false时才会短路。是的,正如其他人指出的。。。这个问题与短路无关。
// The constant true is assigned to $h and then false is executed then and its 
// value is and'd with the results of the assignment. 
// Acts like: (($h = true) and false)
$h = true and false;
// 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());
// The constant true is assigned to $h and then false is ignored
// Acts like: (($h = true) and false)
$h = true and false;