【发布时间】:2015-10-06 02:16:30
【问题描述】:
为什么这段代码低于 echo 的 2 并且没有给出错误,它只是忽略 +1+2+3+4 吗?
我已搜索但找不到答案。
<?php
$i = 1;
$i+++1+2+3+4;
echo $i;
【问题讨论】:
为什么这段代码低于 echo 的 2 并且没有给出错误,它只是忽略 +1+2+3+4 吗?
我已搜索但找不到答案。
<?php
$i = 1;
$i+++1+2+3+4;
echo $i;
【问题讨论】:
那行:
$i+++1+2+3+4;
说:
$i
$i 的值pre 添加到+1+2+3+4,但不要将结果存储在任何地方。因此$i == 2。
如果你不希望它被忽略,你应该存储结果:
$i = $i+++1+2+3+4;
【讨论】:
一切都很好。你刚刚忘记了赋值,所以i 只受++ 运算符的影响:
<?php
$i = 1;
$x = $i+++1+2+3+4;
echo "{$i} vs "{$x}";
会回来
2 vs 11
【讨论】:
您永远不会在任何地方分配已完成的操作:
这两个在功能上是等价的:
$i++;
$i = $i + 1;
两者都会将 $i 加 1,并将增加的值保存在 $i 中
使用$i+++1+2+3+4,您实际上是在执行
($i++) + 1 + 2 + 3 + 4
这是
$i = $i + 1;
1 + 2 + 3 + 4; // useless, result not stored anywhere
所以将$i 增加1,将其保存到$i,然后进行其他添加。但是由于那些没有被保存在任何地方,结果被丢弃了。
如果你有
php > $i = 1;
php > $i = $i+++1+2+3+4;
^^^^^----add this
php > echo $i;
11
那么它会按您的预期工作。
【讨论】:
$i++ 表示$i 加 1。
和 python 一样,+1+2+3+4 意味着将 $i 预增量的值添加到 +1+2+3+4 但不要将其存储在任何地方。(所以没有内存地址或类似的东西......)。
所以你得到的只是$i==2
【讨论】: