我发现了一段代码(来自我们的一位开发人员),我想知道为什么输出为2?
<?php
$a = 1;
$a = $a-- +1;
echo $a;
感谢
答案 0 :(得分:22)
我会给我的解释一个旋转。我们讨论的是一个变量引用系统中的某些值。
因此,当您定义$a = 1
时,您将变量$a
指向值1
,该值在内存中已关闭。
使用第二行,您正在执行$a = $a-- + 1
,因此您创建新值并将其设置为$a
。 $a--
检索原始$a
的值,1
并添加1
以生成2
,并在内存中的其他位置创建该值。所以现在你有一个变量$a
指向2
和其他一些值1
关闭内存,一路上递减到0
,但没有任何东西指向它了,所以谁在乎。
然后,您回显$a
,它指向您2
的值。
修改:Testing Page
答案 1 :(得分:20)
$ a--在行执行后递减值。要获得1的答案,您可以将其更改为 - $ a
<?php
$a = 1;
$a = --$a +1; // Decrement line
echo $a;
?>
答案 2 :(得分:12)
只是为了澄清其他答案,你在这一行中发生了什么:
$a = $a-- +1;
基本上,当PHP计算$ a--时,它实际上返回$ a的值,然后运行递减它的操作。
$a = 1;
echo $a--; //outputs 1;
echo $a; //outputs 0;
运行此代码时,您将看到该数字仅在返回后减少。因此,使用这种逻辑,更清楚为什么
echo $a-- + 1;
输出2而不是1。
或许更好的方式,可以说更明确的是
$a = $a -1 + 1
答案 3 :(得分:9)
$a = 1; /* $a is 1 */
$a = ($a--) /* returns 1 and decrements the copy of $a */ + 1 /* 1 + 1 = 2 */;
echo $a; /* 2 */
以上内容相当于:
$a = 1; /* $a is 1 */
$temp = $a + 1; /* 1 ($a) + 1 = 2 */
$a = $a - 1; /* decrements $a */
$a = $temp; /* assigns the result of the above operation to $a */
echo $a;
这实际上就是PHP在幕后将其翻译成的内容。所以$a--
不是一个有用的操作,因为$a
无论如何都会被覆盖。最好用$a - 1
替换它,以使其更清晰并消除额外的操作。