For example this:
var a = 123;
var b = a++;
now a
contains 124
and b
contains 123
When you put the ++
after the variable, it gets incremented after the assignment. You can also put the ++
before the variable and it gets incremented before the assignment.
Javascript actually behaves exactly the same way as PHP for prefix and postfix incrementing.
++
before variable call pre-increment means increment the value of variable before executing the statement.
++
after variable called post-increment means increment the value of variable after executing the statement.
both increments the value of variable.
$b=$a++;
is equivalent to
$b=$a;//after
$a=$a+1;
$b=++$a;`is equivalent to
$a=$a+1;//before
$b=$a;
Another example
$a=5;
echo $a++;//prints 5;
$a=5;
echo ++$a;//prints 6;
That's why it's called the "post-incrementing operator". Essentially, everything is an expression which results in a value. a + 1
is an expression which results in the value 124. If you assign this to b
with b = a + 1
, b
has the value of 124. If you do not assign the result to anything, a + 1
will still result in the value 124, it will just be thrown away immediately since you're not "catching" it anywhere.
BTW, even b = a + 1
is an expression which returns 124. The resulting value of an assignment expression is the assigned value. That's why c = b = a + 1
works as you'd expect.
Anyway, the special thing about an expression with ++
and --
is that in addition to returning a value, the ++
operator modifies the variable directly. So what happens when you do b = a++
is, the expression a++
returns the value 123 and increments a
. The post incrementor first returns the value, then increments, while the pre incrementor ++a
first increments, then returns the value. If you just wrote a++
by itself without assignment, you won't notice the difference. That's how a++
is usually used, as short-hand for a = a + 1
.
This is pretty standard.
Note that you can also write
b = ++a;
Which has the effect you are probably expecting.
It's important to realise that there are two things going on here: the assignment and the increment and the language should define in which order they will happen. As we have available both ++a
and a++
it makes sense that they should have different meanings.
For those of us from a C background, this is quite natural. If PHP behaves differently, we might be wondering why PHP chose to deviate from what we are accustomed to.
Post-increment and pre-increment are common operators in many languages, Javascript being about 30 years from being the first. PHP supports post-increment too.
This is the standard way of doing it. The postincrement operator assigns the value and then increments.
The preincrement (++a
) operator increments and then assigns.
I am not familiar with php and cannot say how it does it or why.