PHP条件运算符不是瞬态的


php conditional operator not transient

我对这个问题有点困惑,所以我想我应该问一下……

我有这样的代码:

$x="string";
var_dump($x==0); //says true
var_dump($x==true); //says true
var_dump(true==0); //says false

我理解的是:

In 1, `string` gets converted to number, which becomes `0` so condition is true
In 2, `string` is a value, so condition is true
In 3, `true` is not equal to `0` so condition is false

它们单独都有意义,但在一个序列中它们就没有意义了!我听过很多人说这是因为PHP中的条件运算符是not transient。有人能解释一下这是什么意思,以及如何理解这一点吗?

为什么这就说不通呢?你永远不会改变x的值,所以这些语句依赖于x的原始值,即"string"。

您假设x在第一次var_dump中被更改为0,但事实并非如此。它只是与0/false进行比较。该语句将执行您认为正在发生的变量更改:

var_dump(($x = 0) == 0);

或:

var_dump(($x = false) == 0);