Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php的奇怪行为_Php_C++ - Fatal编程技术网

php的奇怪行为

php的奇怪行为,php,c++,Php,C++,今天我注意到php中有一个模棱两可的地方。我运行了这个代码 $i = 5; $i = $i ++; var_dump($i); //output 5 instead of 6 让我们假设$i的初始值为5。现在新的值应该是6,但事实上它是5。当我在C++中做同样的事情时,我得到了预期的6。 是php中的某个bug多年来一直没有被注意到,还是其他什么东西。有人能解释一下吗?为什么你认为这个值应该是6 $i正在递增,将返回递增之前的值(因为您使用的是增量后运算符)并将其分配给$i。似乎是合乎逻辑的

今天我注意到php中有一个模棱两可的地方。我运行了这个代码

$i = 5;
$i = $i ++;
var_dump($i); //output 5 instead of 6 
让我们假设
$i的初始值为5
。现在新的值应该是6,但事实上它是
5
。当我在
C++
中做同样的事情时,我得到了预期的
6

是php中的某个bug多年来一直没有被注意到,还是其他什么东西。有人能解释一下吗?

为什么你认为这个值应该是6


$i
正在递增,将返回递增之前的值(因为您使用的是增量后运算符)并将其分配给
$i
。似乎是合乎逻辑的。

为什么假设值应该是6

$i
正在递增,将返回递增之前的值(因为您使用的是增量后运算符)并将其分配给
$i
。似乎合乎逻辑。

试试看

$i = ++$i;
你会得到正确的结果

问题是,如果执行
$i=$i++
,则
$i
在语句后递增,但您将其分配给另一侧的旧语句,因此它永远无法递增变量

$i = ++$i;
你会得到正确的结果

问题是,如果执行
$i=$i++
,则
$i
在语句后递增,但您将其分配给另一端的旧语句,因此它永远无法递增变量。你所要求的行为是正常的,只是违背了C++开发人员的直觉。 $i++首先返回$i的值,然后执行并递增,++$i在返回之前递增$i。

。你所要求的行为是正常的,只是违背了C++开发人员的直觉。
$i++首先返回$i的值,然后执行并递增,++$i在返回之前递增$i。

问得好,但这看起来像是非常容易出错的代码,肯定会让人困惑。要增加
$i
,请使用标准约定。选择
$i++
$i+=1
$i=$i+1
(或其他一些明显的方法)而不是混合它们。分配给后增量操作的结果看起来很奇怪。不知道PHP,但是在C++中,<代码> i= i++;<代码>未定义。结果得到的
6
是没有意义的。如果像$i=$i++一样,则与$i=$i相同,然后是$i++,即$i=5和$i++给出了$i=6的好问题,但这看起来像是非常容易出错的代码,肯定会让人困惑。要增加
$i
,请使用标准约定。选择
$i++
$i+=1
$i=$i+1
(或其他一些明显的方法)而不是混合它们。分配给后增量操作的结果看起来很奇怪。不知道PHP,但是在C++中,<代码> i= i++;<代码>未定义。结果得到的
6
是没有意义的。如果像$i=$i++一样,则与$i=$i相同,然后是$i++,即$i=5,$i++给出$i=6