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;