为什么 1 +递减值 + 1 = 2?

发布于 2024-12-10 12:37:15 字数 127 浏览 0 评论 0原文

我找到了一段代码(来自我们的一位开发人员),我想知道为什么它的输出是 2?

<?php
  $a = 1;
  $a = $a-- +1;
  echo $a;

谢谢

I found a piece of code (from one of our developer) and I was wondering why the output of this is 2?

<?php
  $a = 1;
  $a = $a-- +1;
  echo $a;

thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

辞慾 2024-12-17 12:37:15

我会尝试一下我的解释。我们正在讨论引用系统中某些值的变量。

因此,当您定义 $a = 1 时,您将变量 $a 指向内存中某处的值 1

在第二行中,您正在执行 $a = $a-- + 1,因此您创建一个新值并将其设置为 $a$a-- 检索原始 $a 的值,即 1 并添加 1 以使2 并在内存中的其他位置创建该值。所以现在你有一个变量 $a ,它指向 2 和内存中的其他值 1 ,它一路递减到 0,但没有任何东西再指向它了,所以谁在乎呢。

然后您回显 $a ,它指向您的值 2

编辑:测试页面

I'll give my explanation a whirl. We're talking about a variable referencing some value off in the system.

So when you define $a = 1, you are pointing the variable $a to a value 1 that's off in memory somewhere.

With the second line, you are doing $a = $a-- + 1 so you are creating a new value and setting that to $a. The $a-- retrieves the value of the original $a, which is 1 and adds 1 to make 2 and creates that value somewhere else in memory. So now you have a variable $a which points to 2 and some other value 1 off in memory which along the way decremented to 0, but nothing is pointing at it anymore, so who cares.

Then you echo $a which points to your value of 2.

Edit: Testing Page

花心好男孩 2024-12-17 12:37:15

$a-- 在该行执行后减少值。要得到答案 1,您可以将其更改为 --$a

<?php
 $a = 1;
 $a = --$a +1; // Decrement line
 echo $a;
?>

$a-- decrements the value after the line executes. To get an answer of 1, you would change it to --$a

<?php
 $a = 1;
 $a = --$a +1; // Decrement line
 echo $a;
?>
爱的十字路口 2024-12-17 12:37:15

什么?

只是为了澄清其他答案,您在这一行中发生了什么:

 $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

What the?

Just to clarify the other answers, what you have going on in this line:

 $a = $a-- +1;

Basically when PHP evaluates $a--, it actually returns the value of $a, and then runs the operation of decrementing it.

Try this

$a = 1;    
echo $a--; //outputs 1;
echo $a;  //outputs 0;

When you run this code, you will see that the number only decrements after it has been returned. So using this logic, it's a bit more clear why

echo $a-- + 1;

would output 2 instead of 1.

A better way

Perhaps a better way, arguably more clear would be

$a = $a -1 + 1
二手情话 2024-12-17 12:37:15
$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,使其更清晰并消除额外的操作。

$a = 1; /* $a is 1 */
$a = ($a--) /* returns 1 and decrements the copy of $a */ + 1 /* 1 + 1 = 2 */;
echo $a; /* 2 */

The above is equivalent to something like:

$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;

That actually pretty much what PHP translates that into, behind the scenes. So $a-- is not such a useful operation, since $a is going to be overwritten anyway. Better simply replace that with $a - 1, to make it both clearer and to eliminate the extra operation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文