当我执行这段代码时,我正在学习php7.2中的运算符优先级:
$i = 1;
$a[$i] = $i++;
var_dump($a);
$j = 1;
$b[$j++] = $j++;
var_dump($b);
我得到了这个结果:
array(1) {
[2]=>
int(1)
}
array(1) {
[1]=>
int(2)
}
我不明白为什么这段代码会给出这些输出。我可以得到第一个var_dump,但第二个对我来说真的很奇怪。
你能解释一下php如何逐步解释这两个例子吗?
我在php 4上得不到相同的结果。
在没有测试/搜索的情况下,不像其他人甚至不知道他们在谈论什么那样回复,而是在调试转换为byteCode时分析PHP的方式的开始。
https://derickrethans.nl/projects.html#vld
我自己没有足够的时间去做。
祝好运 !
即使C ++是编译时语言,在qazxsw poi等指令上也没有标准行为,编译器之间的结果也不同。
PHP是运行时预编译的,因此在编译时间和执行时间方面也优化了性能。行为未定义,可能因版本而异。
你不应该在一条指令中依赖这样的结构 - 没有语言,除非它在规范中有明确的定义。
我想通了,它完全是关于运算符优先级的。
正在按以下顺序处理运算符:
以下代码将在以下步骤中解释:
x = x++
并使用此代码:
$i = 1;
$a[$i] = $i++;
所以最后一个例子几乎与此相同:
$j = 1;
$b[$j++] = $j++;