我对这个问题有点困惑,所以我想我应该问一下……
我有这样的代码:
$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);